javascript - 如何获取iframe的document对象?

标签 javascript html iframe document

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

Iframe 内的 HTML 页面现在使用一些 JavaScript 来根据我尝试更改 css 的特定用户操作来更改 DomElement。 因此我执行以下 JavaScript 代码:

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 中无效。

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

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

有人知道如何解决这个问题或者我需要查找什么吗?我发现的唯一内容是如何访问父文档或子文档,这实际上是我不想要的行为。

感谢您的任何想法

最佳答案

不太清楚你想要什么,但如果你想更新框架内的元素,你需要用 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);

关于javascript - 如何获取iframe的document对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33107044/

相关文章:

javascript - 具有多个条件的 JS 三元函数?

javascript - iframe 没有使用 jQuery 嵌入到 div 中

html - 为什么没有为与页面相同的 url 加载 iframe

javascript - 尝试在 iframe 中打开 URL

javascript - YouTube iframe API——从 onPlayerStateChange 事件处理程序内部引用 Javascript 对象

javascript - OnReadyStateComplete 不会在 IFrame 上触发

javascript - 我可以使用 (undefined || null) 来检查我的变量是 null 还是 undefined 吗?

javascript - 我需要过滤 bootstrap jQuery 数据表

javascript - IE : javascript function call on link click is not working

jquery - 单击图像以添加或删除类