我正在写修改与一个特定的ID元素的属性的GreaseMonkey脚本,但我有由于非传统的HTML层次的一些问题对其进行访问。 下面是相关的HTML:
<body>
...
<iframe id="iframeID">
<html>
...
<body id="bodyID" attribute="value">
...
</body>
...
</html>
</iframe>
...
</body>
其中attribute
是我试图修改属性。
起初,并没有意识到我是有工作iframe
和嵌套的body
标记,我尝试这样做:
document.getElementById('bodyID').setAttribute("attribute","value")
虽然这在Firefox中工作得很好,Chrome的告诉我,我不能设置的属性null
,这表明它无法找到该ID的任何元素bodyID
。 我怎样才能修改一个跨浏览器友好的方式这个属性?
首先,您需要拉的文档<iframe>
document.getElementById('iframeID').contentDocument
.getElementById('bodyID').setAttribute("attribute","value");
现场演示
顺便说一句,如果你想获得的<body>
节点,你不需要给ID或类似的东西,简单地说:
document.body
在你的情况下,它的文档<iframe>
document.getElementById('iframeID').contentDocument.body.setAttribute("attribute","value");
简单了很多...难道不是吗?
最好的办法,国际海事组织,这样做是为了监听load
通过内嵌框架触发的事件,然后寻找到iFrame DOM的需要。 这可以保证你将有iFrame的DOM可用的,当你需要它,需要一段时间出手。
$('#iframeID').on('load', function ()
{
alert('loaded'); // iFrame successfully loaded
var iFrameDoc = $('#iframeID')[0].contentDocument; // Get the iFrame document
$('body', iFrameDoc).attr('attribute', 'new value'); // Get the 'body' in the iFrame document and set 'attribute' to 'new value'
});