📄 khtml_part.cpp
字号:
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_CHANGES
void 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 );
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_CHANGES
void KHTMLPart::slotDebugDOMTree()
{
if ( d->m_doc && d->m_doc->firstChild() )
qDebug("%s", createMarkup(d->m_doc->firstChild()).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 )
{
disconnectChild(&*it);
#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_redirectReferrer = 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;
#if NOKIA_CHANGES
d->m_selection = khtml::Selection();
d->m_firstFound = khtml::Selection();
d->m_lastFound = khtml::Selection();
#endif
#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::DocumentImpl *KHTMLPart::xmlDocImpl() const
{
if ( d )
return d->m_doc;
return 0;
}
void KHTMLPart::replaceDocImpl(DocumentImpl* newDoc)
{
if (d) {
if (d->m_doc) {
d->m_doc->detach();
d->m_doc->deref();
}
d->m_doc = newDoc;
if (newDoc)
newDoc->ref();
}
}
/*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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -