JS:更改 iframe 链接标签内
Posted
技术标签:
【中文标题】JS:更改 iframe 链接标签内【英文标题】:JS: change inside iframe link tags 【发布时间】:2012-03-02 13:14:08 【问题描述】:我正在尝试从 iframe 外部更改 iframe 内所有 a
标记的 href
属性。
这是我目前所拥有的:
<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>
这段代码有什么问题导致它不起作用?
【问题讨论】:
frame.document.getElementsByTagName("a")
【参考方案1】:
首先必须是同一个域
其次应该是:
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 的超时时间足以满足任何连接速度。
编辑:
在 cmets 中,似乎更多的是在不同的域中,如果是这种情况,您不能使用 javascript 或框架来访问或修改跨域的内容。
如果是静态页面,请自行托管,如果是动态的并且可以获取页面的代理副本,则可以使用多种方式:
-
在同一台服务器上使用服务器端语言(如 php)来获取和显示页面,然后在 iframe 中使用同一台服务器上的该页面(然后您将能够访问它)
yql 也可能是一种使用 javascript 获取网页的方法
嗯,很难说不知道你想做什么,也许网站的所有者可以做一些事情,或者例如,如果你只是想在网站上为你的用户添加提示,让他们安装一个用户脚本,这将在网站上执行可能是更好的方法,但不知道为什么需要这样做以及情况如何,很难说。
【讨论】:
这意味着我不能使用这个代码,否则它在同一个域上? 搜索same domain policy
了解更多信息,我已经更新了关于跨域的更多答案【参考方案2】:
由于安全限制,您的 JS 代码无法从 iframe 访问 DOM 元素(iframe 元素位于不同的域中)。
【讨论】:
以上是关于JS:更改 iframe 链接标签内的主要内容,如果未能解决你的问题,请参考以下文章