Javascript 通过JS向现有Iframe添加新元素
我正在尝试在iframe中添加一些html元素,以个性化网站。我正在构建一个浏览器扩展,因此没有跨域问题。我有一个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 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>