JS:更改内部iframe链接标记

时间:2012-02-10 01:24:37

标签: javascript dom iframe nodes

我正在尝试从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>

此代码有什么问题,它不起作用?

2 个答案:

答案 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. 在同一台服务器上使用服务器端语言(如php)来获取和显示页面,然后在iframe中的同一台服务器上使用此页面(然后您就可以访问它了)
  2. yql也可以通过javascript
  3. 获取网页

    嗯,很难说不知道你想做什么,也许网站的所有者可以做点什么,或者例如,如果你只是想为你的用户添加网站上的提示,让他们安装用户脚本将会在网站上执行可能是更好的方式,不知道你为什么需要这个以及情况如何,很难说。

答案 1 :(得分:1)

由于 安全限制 (iframe元素位于不同的域),您的JS代码无法从iframe访问DOM元素。