如何在iframe的本地范围内执行注入的javascript代码?

我在iframe中加载了一个html文档。
我已经在javascript中为该文档开发了一些弹出菜单代码,我将代码从主文档注入iframe。

但我的代码在iframe中不起作用,因为它使用“ document ”对象,并且令人惊讶地引用主文档而不是iframe文档。

我也玩内容选择,我需要window.getSelection()返回到主文档的选择,我需要window.frames[0].getSelection()

我做错了吗?
有没有简单的解决方案来克服这个问题?

更新:(澄清)
正如Bergi指出的那样,我的问题是如何运行正确注入的javascript代码来获取iframe中的本地范围而不是全局范围?
所以我不必在代码中重写documentwindow

更新:(我的HTML的骨架)

      [  ...    ]    

脚本是这样的(使用jquery):

 $(function(){ $('iframe').load(function(){ var $doc = $('iframe').contents(); var $head = $('head', $doc); $head.append(''); var $body = $('body', $doc); $body.append(' \  \ '); $body.append(' \  \ console.log(document.body);// it still displays the global body \  \ '); }); }); 

更新 : 展示问题的小提琴

最后,我找到了答案!

如果使用jQuery附加代码,例如$body.append('则''元素由document.createElement('script')创建,因此将成为全局文档的一部分。 即使将其插入到iframe文档中, 它也会在全局命名空间中执行

所以解决方案是 - 利用这个神话般的解决方案:( 将注入Javascript注入iframe ) - 回归到vanilla javascript:

 $('iframe').load(function(){ var $doc = $('iframe').contents(); var $head = $('head', $doc); $head.append(''); var $body = $('body', $doc); $body.append('');// non-javascript content works fine var doc = $('iframe').contents()[0]; // doc = $doc[0] does not work for some reason... var script = doc.createElement("script"); script.setAttribute("type", "text/javascript"); script.textContent = "console.log(document.body)"; // this will be iframe's body $body[0].appendChild(script1); // $body.append(...) does not work });