Javascript 窗口对象初始化时的回调(在页面中动态包含iframe)

Javascript 窗口对象初始化时的回调(在页面中动态包含iframe),javascript,jquery,Javascript,Jquery,我需要什么: 我的要求是将脚本插入到网页中显示的所有窗口中 我知道我们可以使用window.frames属性找到所有窗口,但这在我的情况下是不够的,因为新窗口可以稍后通过iframes添加到页面中(在DOM中包含iframes) 所以我需要一种机制来跟踪页面中的窗口,比如新窗口初始化时的回调 我的尝试: 我使用Object.observe API跟踪window.frames对象的更改。但我知道Object.observe API将按照此链接()被删除 那么,使用这个API好吗。或者,如果有其他

我需要什么: 我的要求是将脚本插入到网页中显示的所有窗口中

我知道我们可以使用window.frames属性找到所有窗口,但这在我的情况下是不够的,因为新窗口可以稍后通过iframes添加到页面中(在DOM中包含iframes)

所以我需要一种机制来跟踪页面中的窗口,比如新窗口初始化时的回调

我的尝试: 我使用Object.observe API跟踪window.frames对象的更改。但我知道Object.observe API将按照此链接()被删除


那么,使用这个API好吗。或者,如果有其他方法,请让我知道

这里有一种使用MutationObserver API的方法,您可以使用该API检测注入到目标元素中的任何元素,即使文本已更改或元素已附加到目标树的某个位置

函数createIframeOnDemand(等待){
var iframe=document.createElement('iframe')
iframe.src='about:blank';
setTimeout(函数(){
document.body.appendChild(iframe)
},等等| | 2000);
}
var body=document.body;
var观察者=新的突变观察者(功能(突变){
for(突变中的突变IDX){
var突变=突变[突变IDX];
for(突变中的childIndex.addedNodes){
var child=突变。添加节点[childIndex];
if(child.tagName&&child.tagName.toLowerCase()=='iframe'){
console.log(子级);
//child是iframe元素
//在此处将脚本注入'child'
}
}
}
});
var config={attributes:false,childList:true,characterData:false};
observer.observe(body,config);

createIframeOnDemand()您知道交叉原点帧吗?或者所有iFrame都与您的顶级文档具有相同的来源?您如何创建新窗口?一定有类似于
addFrame
之类的事件。正确的?也不确定,但您可以尝试对所有
iFrame
@udidu使用委托进行onload函数,我可以访问的任何窗口都只需要插入脚本。所以需要考虑交叉原点帧。您需要知道,如果您在iframe中有一个具有不同原点的窗口,您将无法注入anything@Rajesh如果我们将iframe附加到现有页面,将创建新窗口。事件委派将在特定文档(每个窗口)的上下文中工作。感谢您努力共享代码。根据文档,回调函数将在每次DOM变异时调用。它会导致性能问题吗?