2015-10-13 82 views
2

我有一个网站,显示特定信息的iframe。他们都来自同一个领域。因此任何用于跨站点脚本的块都不应该成为问题。如何获取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); 
 
    \t 
 
document.getElementsByTagName("head").item(0).replaceChild(newlink, oldlink);

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

当查找“错误”文档时,我会在DeveloperTools中得到一个错误,指出:要替换的节点不是此节点的子节点。

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

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

Thansk任何想法

回答

2

与其说清楚自己想要什么,但如果你想更新你需要通过iframe的文档like this更换“文件”框架内的元素:

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); 
+1

谢谢,这是做的伎俩。 我现在也加载这样的头像:'var head = document.head || document.getElementsByTagName( “头”)[0];' – eagle