钩上appendChild时,我遇到了一个非常奇怪的比赛条件。 考虑以下代码:
var RealAppend = IframeWindow.Element.prototype.appendChild;
IframeWindow.Element.prototype.appendChild = function(){
RealAppend.apply(this, arguments); //some more code here --- >};
我要钩住一些iframe附加子元素,这就是为什么要使用IframeWindow作为iframe内容窗口来执行“ IframeWindow.Element.prototype.appendChild”。
现在,在钩上appendchild之后,我开始将节点追加到iframe中,其中一个节点是具有id =“ somediv”的简单div元素,另一个节点是javascript元素,并且一旦javascript执行后,它将使用document.createElement
创建一个iframe并设置其属性,然后执行document.getElementById('somediv').appendChild(CreatedIframe);
它将创建的iframe附加到“ somediv”上,我的目标是拦截最后一个appendchild并也钩住该iframe的appendchild。
现在我首先想到的是,也许我实际上需要像这样覆盖appendchild:
someDiv.appendChild = function(){.....
但是经过更多测试后,我发现有时我的代码确实成功并挂接了最后一个iframe,有时SomeDiv.appendChild
是本机代码,而我的代码失败了。
有什么想法吗?
编辑: 我认为这可能与我使用
的事实有关document.createRange().createContextualFragment(strHTML);
}
将html解析为字符串,然后将节点附加到iframe,所以div(somediv)可能会从那里获取干净的appendChild?但是为什么有时它会起作用而有时却不起作用呢? 另一件事是,在页面加载后,我使用开发工具获取somediv.appendchild,每次都获取钩子代码,因此问题仅在执行javascript代码时发生
答案 0 :(得分:1)
所以我设法弄清楚问题出在哪里,所以如果有人遇到这个问题,这里就是解决方案: 当我将html字符串解析到节点以便将它们附加到iframe时,我首先使用“ DOMParser” API,但我错过了DOMParser使用来自调用方contentWindow的文档的事实,因此没有像这样调用DOMParser: / p>
new DOMParser();
我需要这样称呼它:
new HookedIframeContentWindow.DOMParser();