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

📄 khtml_part.cpp

📁 khtml在gtk上的移植版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
      if ( !_frame )      {        emit d->m_extension->openURLRequest( url, args );        return;      }      child = _frame;    }  }  // TODO: handle child target correctly! currently the script are always executed fur the parent  if ( url.find( QString::fromLatin1( "javascript:" ), 0, false ) == 0 ) {      executeScript( KURL::decode_string( url.right( url.length() - 11) ) );      return;  }  if ( child ) {      requestObject( child, KURL(url), args );  }  else if ( frameName==QString::fromLatin1("_self") ) // this is for embedded objects (via <object>) which want to replace the current document  {      KParts::URLArgs newArgs( args );      newArgs.frameName = QString::null;      emit d->m_extension->openURLRequest( KURL(url), newArgs );  }}#endif // APPLE_CHANGESvoid KHTMLPart::slotDebugDOMTree(){  if ( d->m_doc && d->m_doc->firstChild() )    qDebug("%s", d->m_doc->firstChild()->toHTML().latin1());}void KHTMLPart::slotDebugRenderTree(){#ifndef NDEBUG  if ( d->m_doc )    d->m_doc->renderer()->printTree();#endif}void KHTMLPart::setAutoloadImages( bool enable ){  if ( d->m_doc && d->m_doc->docLoader()->autoloadImages() == enable )    return;  if ( d->m_doc )    d->m_doc->docLoader()->setAutoloadImages( enable );#if !APPLE_CHANGES  unplugActionList( "loadImages" );  if ( enable ) {    delete d->m_paLoadImages;    d->m_paLoadImages = 0;  }  else if ( !d->m_paLoadImages )    d->m_paLoadImages = new KAction( i18n( "Display Images on Page" ), "images_display", 0, this, SLOT( slotLoadImages() ), actionCollection(), "loadImages" );  if ( d->m_paLoadImages ) {    QPtrList<KAction> lst;    lst.append( d->m_paLoadImages );    plugActionList( "loadImages", lst );  }#endif}bool KHTMLPart::autoloadImages() const{  if ( d->m_doc )    return d->m_doc->docLoader()->autoloadImages();  return true;}void KHTMLPart::clear(){  if ( d->m_bCleared )    return;  d->m_bCleared = true;  d->m_bClearing = true;#if !APPLE_CHANGES  {    ConstFrameIt it = d->m_frames.begin();    ConstFrameIt end = d->m_frames.end();    for(; it != end; ++it )    {      // Stop HTMLRun jobs for frames      if ( (*it).m_run )        (*it).m_run->abort();    }  }  {    QValueList<khtml::ChildFrame>::ConstIterator it = d->m_objects.begin();    QValueList<khtml::ChildFrame>::ConstIterator end = d->m_objects.end();    for(; it != end; ++it )    {      // Stop HTMLRun jobs for objects      if ( (*it).m_run )        (*it).m_run->abort();    }  }  findTextBegin(); // resets d->m_findNode and d->m_findPos#endif  d->m_mousePressNode = DOM::Node();  if ( d->m_doc )    d->m_doc->detach();  // Moving past doc so that onUnload works.  if ( d->m_jscript )    d->m_jscript->clear();  if ( d->m_view )    d->m_view->clear();  // do not dereference the document before the jscript and view are cleared, as some destructors  // might still try to access the document.  if ( d->m_doc )    d->m_doc->deref();  d->m_doc = 0;  if (d->m_decoder)    d->m_decoder->deref();  d->m_decoder = 0;  {    ConstFrameIt it = d->m_frames.begin();    ConstFrameIt end = d->m_frames.end();    for(; it != end; ++it )    {      if ( (*it).m_part )      {#if !APPLE_CHANGES        partManager()->removePart( (*it).m_part );#endif        (*it).m_part->deref();      }    }  }  d->m_frames.clear();  {    ConstFrameIt it = d->m_objects.begin();    ConstFrameIt end = d->m_objects.end();    for(; it != end; ++it )    {      if ( (*it).m_part )      {#if !APPLE_CHANGES        partManager()->removePart( (*it).m_part );#endif        (*it).m_part->deref();      }    }  }  d->m_objects.clear();#ifndef Q_WS_QWS  delete d->m_javaContext;  d->m_javaContext = 0;#endif  d->m_scheduledRedirection = noRedirectionScheduled;  d->m_delayRedirect = 0;  d->m_redirectURL = QString::null;  d->m_redirectLockHistory = true;  d->m_redirectUserGesture = false;  d->m_bHTTPRefresh = false;  d->m_bClearing = false;  d->m_frameNameId = 1;  d->m_bFirstData = true;  d->m_bMousePressed = false;#ifndef QT_NO_CLIPBOARD  connect( kapp->clipboard(), SIGNAL( selectionChanged()), SLOT( slotClearSelection()));#endif#if !APPLE_CHANGES  d->m_totalObjectCount = 0;  d->m_loadedObjects = 0;  d->m_jobPercent = 0;#endif  if ( !d->m_haveEncoding )    d->m_encoding = QString::null;#ifdef SPEED_DEBUG  d->m_parsetime.restart();#endif}bool KHTMLPart::openFile(){  return true;}DOM::HTMLDocumentImpl *KHTMLPart::docImpl() const{    if ( d && d->m_doc && d->m_doc->isHTMLDocument() )        return static_cast<HTMLDocumentImpl*>(d->m_doc);    return 0;}DOM::DocumentImpl *KHTMLPart::xmlDocImpl() const{    if ( d )        return d->m_doc;    return 0;}/*bool KHTMLPart::isSSLInUse() const{  return d->m_ssl_in_use;}*/void KHTMLPart::receivedFirstData(){    // Leave indented one extra for easier merging.          //kdDebug( 6050 ) << "begin!" << endl;    begin( d->m_workingURL, d->m_extension->urlArgs().xOffset, d->m_extension->urlArgs().yOffset );    d->m_doc->docLoader()->setCachePolicy(d->m_cachePolicy);    d->m_workingURL = KURL();    d->m_cacheId = KHTMLPageCache::self()->createCacheEntry();    // When the first data arrives, the metadata has just been made available#if APPLE_CHANGES    QString qData;#else    d->m_bSecurityInQuestion = false;    d->m_ssl_in_use = (d->m_job->queryMetaData("ssl_in_use") == "TRUE");    kdDebug(6050) << "SSL in use? " << d->m_job->queryMetaData("ssl_in_use") << endl;    {    KHTMLPart *p = parentPart();    if (p && p->d->m_ssl_in_use != d->m_ssl_in_use) {	while (p->parentPart()) p = p->parentPart();	p->d->m_paSecurity->setIcon( "halfencrypted" );        p->d->m_bSecurityInQuestion = true;	kdDebug(6050) << "parent setIcon half done." << endl;    }    }    d->m_paSecurity->setIcon( d->m_ssl_in_use ? "encrypted" : "decrypted" );    kdDebug(6050) << "setIcon " << ( d->m_ssl_in_use ? "encrypted" : "decrypted" ) << " done." << endl;    // Shouldn't all of this be done only if ssl_in_use == true ? (DF)    d->m_ssl_peer_certificate = d->m_job->queryMetaData("ssl_peer_certificate");    d->m_ssl_peer_chain = d->m_job->queryMetaData("ssl_peer_chain");    d->m_ssl_peer_ip = d->m_job->queryMetaData("ssl_peer_ip");    d->m_ssl_cipher = d->m_job->queryMetaData("ssl_cipher");    d->m_ssl_cipher_desc = d->m_job->queryMetaData("ssl_cipher_desc");    d->m_ssl_cipher_version = d->m_job->queryMetaData("ssl_cipher_version");    d->m_ssl_cipher_used_bits = d->m_job->queryMetaData("ssl_cipher_used_bits");    d->m_ssl_cipher_bits = d->m_job->queryMetaData("ssl_cipher_bits");    d->m_ssl_cert_state = d->m_job->queryMetaData("ssl_cert_state");    // Check for charset meta-data    QString qData = d->m_job->queryMetaData("charset");    if ( !qData.isEmpty() && !d->m_haveEncoding ) // only use information if the user didn't override the settings       d->m_encoding = qData;#endif // APPLE_CHANGES    // Support for http-refresh    qData = d->m_job->queryMetaData("http-refresh");    if( !qData.isEmpty() && d->m_metaRefreshEnabled )    {      kdDebug(6050) << "HTTP Refresh Request: " << qData << endl;      double delay;      int pos = qData.find( ';' );      if ( pos == -1 )        pos = qData.find( ',' );      if( pos == -1 )      {        delay = qData.stripWhiteSpace().toDouble();#if APPLE_CHANGES        // We want a new history item if the refresh timeout > 1 second        scheduleRedirection( delay, m_url.url(), delay <= 1);#else        scheduleRedirection( delay, m_url.url());#endif      }      else      {        int end_pos = qData.length();        delay = qData.left(pos).stripWhiteSpace().toDouble();        while ( qData[++pos] == ' ' );        if ( qData.find( "url", pos, false ) == pos )        {          pos += 3;          while (qData[pos] == ' ' || qData[pos] == '=' )              pos++;          if ( qData[pos] == '"' )          {              pos++;              int index = end_pos-1;              while( index > pos )              {                if ( qData[index] == '"' )                    break;                index--;              }              if ( index > pos )                end_pos = index;          }        }#if APPLE_CHANGES        // We want a new history item if the refresh timeout > 1 second        scheduleRedirection( delay, d->m_doc->completeURL( qData.mid( pos, end_pos ) ), delay <= 1);#else        scheduleRedirection( delay, d->m_doc->completeURL( qData.mid( pos, end_pos ) ));#endif      }      d->m_bHTTPRefresh = true;    }    // Support for http last-modified    d->m_lastModified = d->m_job->queryMetaData("modified");    //kdDebug() << "KHTMLPart::slotData metadata modified: " << d->m_lastModified << endl;}#if !APPLE_CHANGESvoid KHTMLPart::slotData( KIO::Job* kio_job, const QByteArray &data ){  assert ( d->m_job == kio_job );  //kdDebug( 6050 ) << "slotData: " << data.size() << endl;  // The first data ?  if ( !d->m_workingURL.isEmpty() )    receivedFirstData( );  KHTMLPageCache::self()->addData(d->m_cacheId, data);  write( data.data(), data.size() );}void KHTMLPart::slotRestoreData(const QByteArray &data ){  // The first data ?  if ( !d->m_workingURL.isEmpty() )  {     long saveCacheId = d->m_cacheId;     begin( d->m_workingURL, d->m_extension->urlArgs().xOffset, d->m_extension->urlArgs().yOffset );     d->m_cacheId = saveCacheId;     d->m_workingURL = KURL();  }  //kdDebug( 6050 ) << "slotRestoreData: " << data.size() << endl;  write( data.data(), data.size() );  if (data.size() == 0)  {      //kdDebug( 6050 ) << "slotRestoreData: <<end of data>>" << endl;     // End of data.    if (d->m_doc && d->m_doc->parsing())        end(); //will emit completed()  }}void KHTMLPart::showError( KIO::Job* job ){  kdDebug() << "KHTMLPart::showError d->m_bParsing=" << (d->m_doc && d->m_doc->parsing()) << " d->m_bComplete=" << d->m_bComplete            << " d->m_bCleared=" << d->m_bCleared << endl;  if (job->error() == KIO::ERR_NO_CONTENT)	return;  if ( (d->m_doc && d->m_doc->parsing()) || d->m_workingURL.isEmpty() ) // if we got any data already    job->showErrorDialog( /*d->m_view*/ );  else  {    htmlError( job->error(), job->errorText(), d->m_workingURL );  }}// This is a protected method, placed here because of it's relevance to showErrorvoid KHTMLPart::htmlError( int errorCode, const QString& text, const KURL& reqUrl ){  kdDebug(6050) << "KHTMLPart::htmlError errorCode=" << errorCode << " text=" << text << endl;  // make sure we're not executing any embedded JS  bool bJSFO = d->m_bJScriptForce;  bool bJSOO = d->m_bJScriptOverride;  d->m_bJScriptForce = false;  d->m_bJScriptOverride = true;  begin();  QString errText = QString::fromLatin1( "<HTML><HEAD><TITLE>" );  errText += i18n( "Error while loading %1" ).arg( reqUrl.htmlURL() );  errText += QString::fromLatin1( "</TITLE></HEAD><BODY><P>" );  errText += i18n( "An error occured while loading <B>%1</B>:" ).arg( reqUrl.htmlURL() );  errText += QString::fromLatin1( "</P><P>" );  QString kioErrString = KIO::buildErrorString( errorCode, text );  kioErrString.replace(QRegExp("&"), QString("&amp;"));  kioErrString.replace(QRegExp("<"), QString("&lt;"));  kioErrString.replace(QRegExp(">"), QString("&gt;"));  // In case the error string has '\n' in it, replace with <BR/>  kioErrString.replace( QRegExp("\n"), "<BR/>" );  errText += kioErrString;  errText += QString::fromLatin1( "</P></BODY></HTML>" );  write(errText);  end();  d->m_bJScriptForce = bJSFO;  d->m_bJScriptOverride = bJSOO;  // make the working url the current url, so that reload works and  // emit the progress signals to advance one step in the history  // (so that 'back' works)  m_url = reqUrl; // same as d->m_workingURL  d->m_workingURL = KURL();  emit started( 0 );  emit completed();  return;  // following disabled until 3.1  QString errorName, techName, description;  QStringList causes, solutions;  QByteArray raw = KIO::rawErrorDetail( errorCode, text, &reqUrl );  QDataStream stream(raw, IO_ReadOnly);  stream >> errorName >> techName >> description >> causes >> solutions;

⌨️ 快捷键说明

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