我正在尝试从iframe外部更改iframe中所有href
标记的a
属性。
这是我到目前为止所做的:
<Html>
<Head>
<Title>change links</Title>
</Head>
<body>
<iframe style="width:100%;height: 100%;border:0;" id="tab" src="http://www.anyside.co.il" ></iframe>
<script type="text/javascript">
var frame = document.getElementById("tab");
var tags = frame.getElementsByTagName("a");
for (var i = 0; i < tags.length; i++) {
tags[i].href = 'javascript:alert("")';
}
</script>
</body>
</Html>
此代码有什么问题,它不起作用?
答案 0 :(得分:3)
首先它必须是同一个域
其次应该是:
var frame = window.frames["tab"].document;
var tags = frame.getElementsByTagName("a");
for (var i = 0; i < tags.length; i++) {
tags[i].href = 'javascript:alert("")';
}
或:
var frame = document.getElementById("tab").contentDocument;
var tags = frame.getElementsByTagName("a");
for (var i = 0; i < tags.length; i++) {
tags[i].href = 'javascript:alert("")';
}
(在您的代码中,您只有iframe标记,但您需要此标记框架的文档)
第三,你应该在加载iframe时执行代码(参见iframe的事件onload),或者使用一个setTimeout,其超时时间足以满足任何连接速度。
修改:
在评论中,似乎更多的是关于在不同的域上,如果是这种情况,你不能使用javascript或框架来访问或修改域内的内容。
如果它是静态页面,只需自己托管,如果它是动态的并且可以获得页面的代理副本,您可以使用以下几种方式:
嗯,很难说不知道你想做什么,也许网站的所有者可以做点什么,或者例如,如果你只是想为你的用户添加网站上的提示,让他们安装用户脚本将会在网站上执行可能是更好的方式,不知道你为什么需要这个以及情况如何,很难说。
答案 1 :(得分:1)
由于 安全限制 (iframe元素位于不同的域),您的JS代码无法从iframe访问DOM元素。