Jquery iframe中的$(文档)对于注入的脚本无法正常工作
我有一个iframe。当我以正常方式加载iframe时,所有$document都引用iframe文档 但是当我从主窗口向iframe主体注入一些脚本时,$document指的是主文档而不是iframe 我需要注入的$document引用iframe文档,而不是主文档 我怎样才能解决这个问题 更新 您可以在控制台中看到,注入的$document显示了与$document相同的内容Jquery iframe中的$(文档)对于注入的脚本无法正常工作,jquery,Jquery,我有一个iframe。当我以正常方式加载iframe时,所有$document都引用iframe文档 但是当我从主窗口向iframe主体注入一些脚本时,$document指的是主文档而不是iframe 我需要注入的$document引用iframe文档,而不是主文档 我怎样才能解决这个问题 更新 您可以在控制台中看到,注入的$document显示了与$document相同的内容 问题来自使用$.globalEval的jQuery: 此方法的行为与使用普通JavaScript评估不同 因为它是在全
问题来自使用$.globalEval的jQuery: 此方法的行为与使用普通JavaScript评估不同 因为它是在全局上下文中执行的,这一点很重要 用于动态加载外部脚本 来自jQuery的源代码domManip方法: 要解决您的问题,您可以改用javascript appendChild,例如:
var head = $("#myframe")[0].contentWindow.document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.innerHTML = 'console.log("injected script using javascript appendChild:" ); console.log(document);';
head.appendChild(script);
使用$'myIframe'。内容不跨域iframe@A.Wolff我不能,因为注入的代码也可以加载到另一个元素中,而不是关于脚本注入的iframePost相关代码。我想问题是因为jQuery在内部使用了$.globalEval
// Evaluate executable scripts on first document insertion
for ( i = 0; i < hasScripts; i++ ) {
node = scripts[ i ];
if ( rscriptType.test( node.type || "" ) &&
!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
if ( node.src ) {
// Hope ajax is available...
jQuery._evalUrl( node.src );
} else {
jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
}
}
}
append: function() {
return this.domManip( arguments, function( elem ) {...});
}
var head = $("#myframe")[0].contentWindow.document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.innerHTML = 'console.log("injected script using javascript appendChild:" ); console.log(document);';
head.appendChild(script);