如何获取iframe的文档对象?

时间:2015-10-13 15:44:49

标签: javascript html iframe document

我有一个网站,显示特定信息的iframe。它们都来自同一个域。因此,跨站点脚本的任何块都不应成为问题。

Iframe中的HTML页面现在使用一些JavaScript来改变DomElement,具体取决于我尝试更改css的特定用户操作。 因此我遵循JavaScriptCode:



var oldlink = document.getElementsByTagName("link").item(1);
    
var newlink = document.createElement("link");
newlink.setAttribute("rel", "stylesheet");
newlink.setAttribute("type", "text/css");
newlink.setAttribute("href", cssFile);
    	
document.getElementsByTagName("head").item(0).replaceChild(newlink, oldlink);




这在独立工作正常。现在问题是它嵌入在iframe中。我现在从主/父html文档中获取文档而不是来自自己(子)文档的文档。 有人知道为什么吗?它似乎适用于Firefox,但不适用于Chrome和IE。

当它查找"错误" documet我在DeveloperTools中得到一个错误,指出:要替换的节点不是该节点的子节点。

我知道它无法找到Node,因为它不在父文档中,而在子文档中。

任何关于如何解决这个或我需要查找的想法?我发现的唯一的东西是如何访问父文件或子文件,这实际上是我不想要的行为。

Thansk有任何想法

1 个答案:

答案 0 :(得分:3)

不太清楚你想要什么,但如果你想更新框架内的元素,你需要用iframe文档like this替换'document':

var iframe = document.getElementById('iframeId');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;

然后你的代码将是这样的:

var oldlink = innerDoc.getElementsByTagName("link").item(1);

var newlink = innerDoc.createElement("link");
newlink.setAttribute("rel", "stylesheet");
newlink.setAttribute("type", "text/css");
newlink.setAttribute("href", cssFile);

innerDoc.getElementsByTagName("head").item(0).replaceChild(newlink, oldlink);