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

📄 khtml_part.cpp

📁 khtml在gtk上的移植版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
  // in case we have a) no frameset (don't test m_frames.count(), iframes get in there)  // b) the url is identical with the currently  // displayed one (except for the htmlref!) , c) the url request is not a POST  // operation and d) the caller did not request to reload the page we try to  // be smart and instead of reloading the whole document we just jump to the  // request html anchor  if (d->m_doc) {      bool isFrameSet = false;      if ( d->m_doc->isHTMLDocument() ) {          HTMLDocumentImpl* htmlDoc = static_cast<HTMLDocumentImpl*>(d->m_doc);          isFrameSet = htmlDoc->body() && (htmlDoc->body()->id() == ID_FRAMESET);      }      if ( !isFrameSet &&           urlcmp( url.url(), m_url.url(), true, true ) &&           url.hasRef() && !args.doPost() && !args.reload )      {        kdDebug( 6050 ) << "KHTMLPart::openURL, jumping to anchor. m_url = " << url.url() << endl;        m_url = url;        emit started( 0L );        gotoAnchor();        d->m_bComplete = true;        d->m_doc->setParsing(false);        kdDebug( 6050 ) << "completed..." << endl;        emit completed();        return true;      }  }#endif // APPLE_CHANGES  if (!d->m_restored)  {    kdDebug( 6050 ) << "closing old URL" << endl;    closeURL();  }#if !APPLE_CHANGES  args.metaData().insert("main_frame_request", parentPart() == 0 ? "TRUE" : "FALSE" );  args.metaData().insert("ssl_was_in_use", d->m_ssl_in_use ? "TRUE" : "FALSE" );  args.metaData().insert("ssl_activate_warnings", "TRUE" );#endif  if (d->m_restored)     d->m_cachePolicy = KIO::CC_Cache;  else if (args.reload)     d->m_cachePolicy = KIO::CC_Refresh;  else     d->m_cachePolicy = KIO::CC_Verify;  if ( args.doPost() && (url.protocol().startsWith("http")) )  {      d->m_job = KIO::http_post( url, args.postData, false );      d->m_job->addMetaData("content-type", args.contentType() );  }  else  {      d->m_job = KIO::get( url, false, false );      d->m_job->addMetaData("cache", KIO::getCacheControlString(d->m_cachePolicy));  }  d->m_job->addMetaData(args.metaData());  connect( d->m_job, SIGNAL( result( KIO::Job * ) ),           SLOT( slotFinished( KIO::Job * ) ) );#if !APPLE_CHANGES  connect( d->m_job, SIGNAL( data( KIO::Job*, const QByteArray &)),           SLOT( slotData( KIO::Job*, const QByteArray &)));#endif  connect( d->m_job, SIGNAL(redirection(KIO::Job*, const KURL&) ),           SLOT( slotRedirection(KIO::Job*,const KURL&) ) );  d->m_bComplete = false;  d->m_bLoadEventEmitted = false;  // delete old status bar msg's from kjs (if it _was_ activated on last URL)  if( d->m_bJScriptEnabled )  {     d->m_kjsStatusBarText = QString::null;     d->m_kjsDefaultStatusBarText = QString::null;  }  // set the javascript flags according to the current url#if !APPLE_CHANGES  d->m_bJScriptDebugEnabled = KHTMLFactory::defaultHTMLSettings()->isJavaScriptDebugEnabled();  d->m_bJavaEnabled = KHTMLFactory::defaultHTMLSettings()->isJavaEnabled(url.host());  d->m_bPluginsEnabled = KHTMLFactory::defaultHTMLSettings()->isPluginsEnabled(url.host());#else  d->m_bJScriptDebugEnabled = d->m_settings->isJavaScriptDebugEnabled();  d->m_bJavaEnabled = d->m_settings->isJavaEnabled(url.host());  d->m_bPluginsEnabled = d->m_settings->isPluginsEnabled(url.host());#endif  // initializing m_url to the new url breaks relative links when opening such a link after this call and _before_ begin() is called (when the first  // data arrives) (Simon)  m_url = url;  if(m_url.protocol().startsWith( "http" ) && !m_url.host().isEmpty() &&     m_url.path().isEmpty()) {    m_url.setPath("/");    emit d->m_extension->setLocationBarURL( m_url.prettyURL() );  }  // copy to m_workingURL after fixing m_url above  d->m_workingURL = m_url;  kdDebug( 6050 ) << "KHTMLPart::openURL now (before started) m_url = " << m_url.url() << endl;  connect( d->m_job, SIGNAL( speed( KIO::Job*, unsigned long ) ),           this, SLOT( slotJobSpeed( KIO::Job*, unsigned long ) ) );  connect( d->m_job, SIGNAL( percent( KIO::Job*, unsigned long ) ),           this, SLOT( slotJobPercent( KIO::Job*, unsigned long ) ) );  emit started( 0L );  return true;}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 && !d->m_bUnloadEventEmitted ) {      hdoc->body()->dispatchWindowEvent( EventImpl::UNLOAD_EVENT, false, false );      if ( d->m_doc )        d->m_doc->updateRendering();      d->m_bUnloadEventEmitted = true;    }  }  d->m_bComplete = true; // to avoid emitting completed() in slotFinishedParsing() (David)  d->m_bLoadEventEmitted = true; // don't want that one either  d->m_cachePolicy = KIO::CC_Verify; // Why here?  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();  ConstFrameIt end = d->m_frames.end();  for (; it != end; ++it )    if ( !( *it ).m_part.isNull() )      ( *it ).m_part->closeURL();  d->m_bPendingChildRedirection = false;  // Stop any started redirections as well!! (DA)  cancelRedirection();  // null node activated.  emit nodeActivated(Node());  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;}KParts::BrowserExtension *KHTMLPart::browserExtension() const{  return d->m_extension;}KHTMLView *KHTMLPart::view() const{  return d->m_view;}void KHTMLPart::setJScriptEnabled( bool enable ){  if ( !enable && jScriptEnabled() && d->m_jscript ) {    d->m_jscript->clear();  }  d->m_bJScriptForce = enable;  d->m_bJScriptOverride = true;}bool KHTMLPart::jScriptEnabled() const{  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)//#define DIRECT_LINKAGE_TO_ECMA#ifdef DIRECT_LINKAGE_TO_ECMAextern "C" { KJSProxy *kjs_html_init(KHTMLPart *khtmlpart); }#endifKJSProxy *KHTMLPart::jScript(){  if (!jScriptEnabled()){    return 0;  }  if ( !d->m_jscript )  {#ifndef DIRECT_LINKAGE_TO_ECMA    KLibrary *lib = KLibLoader::self()->library("kjs_html");    if ( !lib ) {      setJScriptEnabled( false );      return 0;    }    // look for plain C init function    void *sym = lib->symbol("kjs_html_init");    if ( !sym ) {      lib->unload();      setJScriptEnabled( false );      return 0;    }    typedef KJSProxy* (*initFunction)(KHTMLPart *);    initFunction initSym = (initFunction) sym;    d->m_jscript = (*initSym)(this);    d->m_kjs_lib = lib;#else    d->m_jscript = kjs_html_init(this);    // d->m_kjs_lib remains 0L.#endif    if (d->m_bJScriptDebugEnabled)        d->m_jscript->setDebugEnabled(true);  }  return d->m_jscript;}void KHTMLPart::replaceContentsWithScriptResult( const KURL &url ){  QString script = KURL::decode_string(url.url().mid(strlen("javascript:")));  QVariant ret = executeScript(script);    if (ret.type() == QVariant::String) {    begin();    write(ret.asString());    end();  }}QVariant KHTMLPart::executeScript( const QString &script, bool forceUserGesture ){    return executeScript( DOM::Node(), script, forceUserGesture );}//Enable this to see all JS scripts being executed//#define KJS_VERBOSEQVariant KHTMLPart::executeScript( const DOM::Node &n, const QString &script, bool forceUserGesture ){#ifdef KJS_VERBOSE  kdDebug(6070) << "KHTMLPart::executeScript n=" << n.nodeName().string().latin1() << "(" << (n.isNull() ? 0 : n.nodeType()) << ") " << script << endl;#endif  KJSProxy *proxy = jScript();  if (!proxy || proxy->paused())    return QVariant();  d->m_runningScripts++;  // If forceUserGesture is true, then make the script interpreter  // treat it as if triggered by a user gesture even if there is no  // current DOM event being processed.  QVariant ret = proxy->evaluate( forceUserGesture ? QString::null : m_url.url(), 0, script, n );  d->m_runningScripts--;  if (!d->m_runningScripts && d->m_doc && !d->m_doc->parsing() && d->m_submitForm )      submitFormAgain();    DocumentImpl::updateDocumentsRendering();#ifdef KJS_VERBOSE  kdDebug(6070) << "KHTMLPart::executeScript - done" << endl;#endif  return ret;}bool KHTMLPart::scheduleScript(const DOM::Node &n, const QString& script){    //kdDebug(6050) << "KHTMLPart::scheduleScript "<< script << endl;    d->scheduledScript = script;    d->scheduledScriptNode = n;    return true;}QVariant KHTMLPart::executeScheduledScript(){  if( d->scheduledScript.isEmpty() )    return QVariant();  //kdDebug(6050) << "executing delayed " << d->scheduledScript << endl;  QVariant ret = executeScript( d->scheduledScriptNode, d->scheduledScript );  d->scheduledScript = QString();  d->scheduledScriptNode = DOM::Node();  return ret;}void KHTMLPart::setJavaEnabled( bool enable ){  d->m_bJavaForce = enable;  d->m_bJavaOverride = true;}bool KHTMLPart::javaEnabled() const{#ifndef Q_WS_QWS  if( d->m_bJavaOverride )      return d->m_bJavaForce;  return d->m_bJavaEnabled;#else  return false;#endif}KJavaAppletContext *KHTMLPart::javaContext(){#ifndef Q_WS_QWS  return d->m_javaContext;#else  return 0;#endif}KJavaAppletContext *KHTMLPart::createJavaContext(){#ifndef Q_WS_QWS  if ( !d->m_javaContext ) {#if APPLE_CHANGES      d->m_javaContext = new KJavaAppletContext(d->m_dcopobject, this);#else      d->m_javaContext = new KJavaAppletContext(d->m_dcopobject);      connect( d->m_javaContext, SIGNAL(showStatus(const QString&)),               this, SIGNAL(setStatusBarText(const QString&)) );      connect( d->m_javaContext, SIGNAL(showDocument(const QString&, const QString&)),               this, SLOT(slotShowDocument(const QString&, const QString&)) );#endif  }  return d->m_javaContext;#else  return 0;#endif}void KHTMLPart::setPluginsEnabled( bool enable ){  d->m_bPluginsForce = enable;  d->m_bPluginsOverride = true;}bool KHTMLPart::pluginsEnabled() const{  if ( d->m_bPluginsOverride )      return d->m_bPluginsForce;  return d->m_bPluginsEnabled;}#if !APPLE_CHANGESvoid KHTMLPart::slotShowDocument( const QString &url, const QString &target ){  // this is mostly copied from KHTMLPart::slotChildURLRequest. The better approach  // would be to put those functions into a single one.  khtml::ChildFrame *child = 0;  KParts::URLArgs args;  args.frameName = target;  QString frameName = args.frameName.lower();  if ( !frameName.isEmpty() )  {    if ( frameName == QString::fromLatin1( "_top" ) )    {      emit d->m_extension->openURLRequest( url, args );      return;    }    else if ( frameName == QString::fromLatin1( "_blank" ) )    {      emit d->m_extension->createNewWindow( url, args );      return;    }    else if ( frameName == QString::fromLatin1( "_parent" ) )    {      KParts::URLArgs newArgs( args );      newArgs.frameName = QString::null;      emit d->m_extension->openURLRequest( url, newArgs );      return;    }    else if ( frameName != QString::fromLatin1( "_self" ) )    {      khtml::ChildFrame *_frame = recursiveFrameRequest( url, args );

⌨️ 快捷键说明

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