⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 khtml_part.cpp.orig

📁 konqueror3 embedded版本, KDE环境下的当家浏览器的嵌入式版本源码包.
💻 ORIG
📖 第 1 页 / 共 5 页
字号:
bool KHTMLPart::closeURL(){  if ( d->m_job )  {    KHTMLPageCache::self()->cancelEntry(d->m_cacheId);    d->m_job->kill();    d->m_job = 0;  }  if ( d->m_doc && d->m_doc->isHTMLDocument() ) {    HTMLDocumentImpl* hdoc = static_cast<HTMLDocumentImpl*>( d->m_doc );    if ( hdoc->body() && d->m_bLoadEventEmitted ) {      hdoc->body()->dispatchWindowEvent( EventImpl::UNLOAD_EVENT, false, false );      if ( d->m_doc )        d->m_doc->updateRendering();      d->m_bLoadEventEmitted = false;    }  }  d->m_bComplete = true; // to avoid emitting completed() in slotFinishedParsing() (David)  d->m_bLoadEventEmitted = true; // don't want that one either  d->m_cachePolicy = KProtocolManager::cacheControl(); // reset cache policy  disconnect(d->m_view, SIGNAL(finishedLayout()), this, SLOT(restoreScrollPosition()));  KHTMLPageCache::self()->cancelFetch(this);  if ( d->m_doc && d->m_doc->parsing() )  {    kdDebug( 6050 ) << " was still parsing... calling end " << endl;    slotFinishedParsing();    d->m_doc->setParsing(false);  }  if ( !d->m_workingURL.isEmpty() )  {    // Aborted before starting to render    kdDebug( 6050 ) << "Aborted before starting to render, reverting location bar to " << m_url.prettyURL() << endl;    emit d->m_extension->setLocationBarURL( m_url.prettyURL() );  }  d->m_workingURL = KURL();  if ( d->m_doc && d->m_doc->docLoader() )    khtml::Cache::loader()->cancelRequests( d->m_doc->docLoader() );  // tell all subframes to stop as well  {    ConstFrameIt it = d->m_frames.begin();    const ConstFrameIt end = d->m_frames.end();    for (; it != end; ++it )    {      if ( (*it)->m_run )        (*it)->m_run->abort();      if ( !( *it )->m_part.isNull() )        ( *it )->m_part->closeURL();    }  }  // tell all objects to stop as well  {    ConstFrameIt it = d->m_objects.begin();    const ConstFrameIt end = d->m_objects.end();    for (; it != end; ++it)    {      if ( !( *it )->m_part.isNull() )        ( *it )->m_part->closeURL();    }  }  // Stop any started redirections as well!! (DA)  if ( d && d->m_redirectionTimer.isActive() )    d->m_redirectionTimer.stop();  // null node activated.  emit nodeActivated(Node());  // make sure before clear() runs, we pop out of a dialog's message loop  if ( d->m_view )    d->m_view->closeChildDialogs();  return true;}DOM::HTMLDocument KHTMLPart::htmlDocument() const{  if (d->m_doc && d->m_doc->isHTMLDocument())    return static_cast<HTMLDocumentImpl*>(d->m_doc);  else    return static_cast<HTMLDocumentImpl*>(0);}DOM::Document KHTMLPart::document() const{    return d->m_doc;}QString KHTMLPart::documentSource() const{  QString sourceStr;  if ( !( m_url.isLocalFile() ) && KHTMLPageCache::self()->isComplete( d->m_cacheId ) )  {     QByteArray sourceArray;     QDataStream dataStream( sourceArray, IO_WriteOnly );     KHTMLPageCache::self()->saveData( d->m_cacheId, &dataStream );     QTextStream stream( sourceArray, IO_ReadOnly );     stream.setCodec( QTextCodec::codecForName( encoding().latin1() ) );     sourceStr = stream.read();  } else  {    QString tmpFile;    if( KIO::NetAccess::download( m_url, tmpFile, NULL ) )    {      QFile f( tmpFile );      if ( f.open( IO_ReadOnly ) )      {        QTextStream stream( &f );        stream.setCodec( QTextCodec::codecForName( encoding().latin1() ) );	sourceStr = stream.read();        f.close();      }      KIO::NetAccess::removeTempFile( tmpFile );    }  }  return sourceStr;}KParts::BrowserExtension *KHTMLPart::browserExtension() const{  return d->m_extension;}KParts::BrowserHostExtension *KHTMLPart::browserHostExtension() const{  return d->m_hostExtension;}KHTMLView *KHTMLPart::view() const{  return d->m_view;}void KHTMLPart::setStatusMessagesEnabled( bool enable ){  d->m_statusMessagesEnabled = enable;}KJS::Interpreter *KHTMLPart::jScriptInterpreter(){  KJSProxy *proxy = jScript();  if (!proxy || proxy->paused())    return 0;  return proxy->interpreter();}bool KHTMLPart::statusMessagesEnabled() const{  return d->m_statusMessagesEnabled;}void KHTMLPart::setJScriptEnabled( bool enable ){  if ( !enable && jScriptEnabled() && d->m_frame && d->m_frame->m_jscript ) {    d->m_frame->m_jscript->clear();  }  d->m_bJScriptForce = enable;  d->m_bJScriptOverride = true;}bool KHTMLPart::jScriptEnabled() const{  if(onlyLocalReferences()) return false;  if ( d->m_bJScriptOverride )      return d->m_bJScriptForce;  return d->m_bJScriptEnabled;}void KHTMLPart::setMetaRefreshEnabled( bool enable ){  d->m_metaRefreshEnabled = enable;}bool KHTMLPart::metaRefreshEnabled() const{  return d->m_metaRefreshEnabled;}// Define this to disable dlopening kjs_html, when directly linking to it.// You need to edit khtml/Makefile.am to add ./ecma/libkjs_html.la to LIBADD// and to edit khtml/ecma/Makefile.am to s/kjs_html/libkjs_html/, remove libkhtml from LIBADD,//        remove LDFLAGS line, and replace kde_module with either lib (shared) or noinst (static)//        Also, change the order of "ecma" and "." in khtml's SUBDIRS line.// OK - that's the default now, use the opposite of the above instructions to go back// to "dlopening it" - but it breaks exception catching in kjs_binding.cpp#define DIRECT_LINKAGE_TO_ECMA#ifdef DIRECT_LINKAGE_TO_ECMAextern "C" { KJSProxy *kjs_html_init(khtml::ChildFrame * childframe); }#endifstatic bool createJScript(khtml::ChildFrame *frame){#ifndef DIRECT_LINKAGE_TO_ECMA  KLibrary *lib = KLibLoader::self()->library("kjs_html");  if ( !lib ) {    setJScriptEnabled( false );    return false;  }  // look for plain C init function  void *sym = lib->symbol("kjs_html_init");  if ( !sym ) {    lib->unload();    setJScriptEnabled( false );    return false;  }  typedef KJSProxy* (*initFunction)(khtml::ChildFrame *);  initFunction initSym = (initFunction) sym;  frame->m_jscript = (*initSym)(d->m_frame);  frame->m_kjs_lib = lib;#else  frame->m_jscript = kjs_html_init(frame);  // frame->m_kjs_lib remains 0L.#endif  return true;}KJSProxy *KHTMLPart::jScript(){  if (!jScriptEnabled()) return 0;  if ( !d->m_frame ) {      KHTMLPart * p = parentPart();      if (!p) {          d->m_frame = new khtml::ChildFrame;          d->m_frame->m_part = this;      } else {          ConstFrameIt it = p->d->m_frames.begin();          const ConstFrameIt end = p->d->m_frames.end();          for (; it != end; ++it)              if ((*it)->m_part.operator->() == this) {                  d->m_frame = *it;                  break;              }      }      if ( !d->m_frame )        return 0;  }  if ( !d->m_frame->m_jscript )    if (!createJScript(d->m_frame))      return 0;  if (d->m_bJScriptDebugEnabled)    d->m_frame->m_jscript->setDebugEnabled(true);  return d->m_frame->m_jscript;}QVariant KHTMLPart::crossFrameExecuteScript(const QString& target,  const QString& script){  KHTMLPart* destpart = this;  QString trg = target.lower();  if (target == "_top") {    while (destpart->parentPart())      destpart = destpart->parentPart();  }  else if (target == "_parent") {    if (parentPart())      destpart = parentPart();  }  else if (target == "_self" || target == "_blank")  {    // we always allow these  }  else {    destpart = findFrame(target);    if (!destpart)       destpart = this;  }  // easy way out?  if (destpart == this)    return executeScript(DOM::Node(), script);  // now compare the domains  if (destpart->checkFrameAccess(this))    return destpart->executeScript(DOM::Node(), script);  // eww, something went wrong. better execute it in our frame  return executeScript(DOM::Node(), script);}//Enable this to see all JS scripts being executed//#define KJS_VERBOSEKJSErrorDlg *KHTMLPart::jsErrorExtension() {#ifndef KONQ_EMBEDDED  if (!d->m_settings->jsErrorsEnabled()) {    return 0L;  }  if (parentPart()) {    return parentPart()->jsErrorExtension();  }  if (!d->m_statusBarJSErrorLabel) {    d->m_statusBarJSErrorLabel = new KURLLabel(d->m_statusBarExtension->statusBar());    d->m_statusBarJSErrorLabel->setFixedHeight(instance()->iconLoader()->currentSize(KIcon::Small));    d->m_statusBarJSErrorLabel->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));    d->m_statusBarJSErrorLabel->setUseCursor(false);    d->m_statusBarExtension->addStatusBarItem(d->m_statusBarJSErrorLabel, 0, false);    QToolTip::add(d->m_statusBarJSErrorLabel, i18n("This web page contains coding errors."));    d->m_statusBarJSErrorLabel->setPixmap(SmallIcon("bug", instance()));    connect(d->m_statusBarJSErrorLabel, SIGNAL(leftClickedURL()), SLOT(launchJSErrorDialog()));    connect(d->m_statusBarJSErrorLabel, SIGNAL(rightClickedURL()), SLOT(jsErrorDialogContextMenu()));  }  if (!d->m_jsedlg) {    d->m_jsedlg = new KJSErrorDlg;    d->m_jsedlg->setURL(m_url.prettyURL());    if (KGlobalSettings::showIconsOnPushButtons()) {      d->m_jsedlg->_clear->setIconSet(SmallIconSet("locationbar_erase"));      d->m_jsedlg->_close->setIconSet(SmallIconSet("fileclose"));    }  }  return d->m_jsedlg;#else // KONQ_EMBEDDED  return 0;#endif}void KHTMLPart::removeJSErrorExtension() {#ifndef KONQ_EMBEDDED  if (parentPart()) {    parentPart()->removeJSErrorExtension();    return;  }  if (d->m_statusBarJSErrorLabel != 0) {    d->m_statusBarExtension->removeStatusBarItem( d->m_statusBarJSErrorLabel );    delete d->m_statusBarJSErrorLabel;    d->m_statusBarJSErrorLabel = 0;  }  delete d->m_jsedlg;  d->m_jsedlg = 0;#endif // KONQ_EMBEDDED}void KHTMLPart::disableJSErrorExtension() {#ifndef KONQ_EMBEDDED  removeJSErrorExtension();  // These two lines are really kind of hacky, and it sucks to do this inside  // KHTML but I don't know of anything that's reasonably easy as an alternative  // right now.  It makes me wonder if there should be a more clean way to  // contact all running "KHTML" instance as opposed to Konqueror instances too.  d->m_settings->setJSErrorsEnabled(false);  DCOPClient::mainClient()->send("konqueror*", "KonquerorIface", "reparseConfiguration()", QByteArray());#endif // KONQ_EMBEDDED}void KHTMLPart::jsErrorDialogContextMenu() {  KPopupMenu *m = new KPopupMenu(0L);  m->insertItem(i18n("&Hide Errors"), this, SLOT(removeJSErrorExtension()));  m->insertItem(i18n("&Disable Error Reporting"), this, SLOT(disableJSErrorExtension()));  m->popup(QCursor::pos());}void KHTMLPart::launchJSErrorDialog() {  KJSErrorDlg *dlg = jsErrorExtension();  if (dlg) {    dlg->show();    dlg->raise();  }}void KHTMLPart::launchJSConfigDialog() {  QStringList args;  args << "khtml_java_js";  KApplication::kdeinitExec( "kcmshell", args );}QVariant KHTMLPart::executeScript(const QString& filename, int baseLine, const DOM::Node& n, const QString& script){#ifdef KJS_VERBOSE  // The script is now printed by KJS's Parser::parse  kdDebug(6070) << "executeScript: caller='" << name() << "' filename=" << filename << " baseLine=" << baseLine /*<< " script=" << script*/ << endl;#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -