📄 khtml_part.cpp
字号:
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("&")); kioErrString.replace(QRegExp("<"), QString("<")); kioErrString.replace(QRegExp(">"), QString(">")); // 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 + -