Javascript 通过JS向现有Iframe添加新元素

Javascript 通过JS向现有Iframe添加新元素,javascript,firefox,dom,iframe,firefox-addon,Javascript,Firefox,Dom,Iframe,Firefox Addon,我正在尝试在iframe中添加一些html元素,以个性化网站。我正在构建一个浏览器扩展,因此没有跨域问题。我有一个iframe: <iframe id="container" src="http://www.google.com"> <p>Your browser does not support iframes.</p> </iframe> 下面是一个JSFIDLE演示,以了解问题(请记住,扩展还有其他特权): 有什么想法吗?在评论中澄

我正在尝试在iframe中添加一些html元素,以个性化网站。我正在构建一个浏览器扩展,因此没有跨域问题。我有一个iframe:

<iframe id="container" src="http://www.google.com">
    <p>Your browser does not support iframes.</p>
</iframe>
下面是一个JSFIDLE演示,以了解问题(请记住,扩展还有其他特权):


有什么想法吗?

在评论中澄清后:

var ifr = gBrowser.selectedBrowser.contentDocument.getElementById('container')
不要这样做
.contentWindow
,然后从中获取
文档,它是无用的、冗余的等等

也不要使用
querySelector
如果你想通过
id
获取一些东西,那么速度差很大,
getElementById
要快得多

另外,不要执行
。innerHTML
插件审批人不会接受它,因为它会导致安全问题。执行
.textContent

您的小提琴不起作用,因为:

  • 您不能进行跨帧通信
  • 我不确定,但我认为:
    createElement
    是javascript中的一个“本机”函数,因此在away中保留了它,尽管它是
    document.createElement
    但是
  • 这把小提琴工作正常,
    rawr
    函数在body中未定义,我不确定为什么要将脚本移动到文档中:

    
    函数createElementMY(){
    var doc=document.getElementById('container');
    var ifrDoc=doc.contentDocument;
    var elem=ifrDoc.createElement(“div”);
    elem.textContent='Test';
    ifrDoc.body.appendChild(elem);
    }
    点击我!
    
    为什么您认为可以在Google.com中插入HTML内容?你能把它说的地方联系起来吗?我不明白为什么在创建浏览器扩展时,同源策略会有任何不同。扩展可以做到这一点。例如,Greasemonkey您是否正在尝试创建浏览器扩展或用户脚本?您运行此代码的范围是什么?chrome窗口(Firefox)嘿!谢谢你的解释!但我还是有问题。在您的演示中,您使用的是一个“空”iframe,没有链接到任何外部url。我更新了demo()以与外部源一起工作,它抛出了erro:Permission denied来访问内容代码中的属性“document”,您将得到该错误。但是从私有范围(chrome范围)中,你不会得到那个错误。见:
    var ifr = gBrowser.selectedBrowser.contentDocument.getElementById('container')
    
    <script>
    function createElementMY(){
        var doc = document.getElementById('container');
    
        var ifrDoc = doc.contentDocument;
    
    
        var elem = ifrDoc.createElement("div");
        elem.textContent = 'Test';
        ifrDoc.body.appendChild(elem);
    }
    </script>
    <iframe id="container" src="data:text/html,rawr"></iframe>
    <button onclick="createElementMY()">Click me!</button>