以编程方式使用Javascript单击iframe中的链接

时间:2014-01-17 18:21:11

标签: javascript html iframe

这是我的html / javascript。下面有两个我试过的if语句。我使用indexof来获取标签之间的文本。还尝试使用href ==来使用href = contents。两者都不起作用。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>pb</title>
    <script type="text/javascript">
    function call() {
        alert("Called!");
        var allAnc = document.getElementById("d").contentDocument.getElementsByTagName("a");
        for (var i = 0; i < allAnc.length; i++) {
            if (allAnc[i].href.indexOf("Flag") > 0) {
                alert("Found link by indexof, Trying to click!");
                (allAnc[i]).click();
                break;
            }
            if (allAnc[i].href == "javascript:flag.closeit()") {
                alert("Found link by href, Trying to click!");
                (allAnc[i]).click();
                break;
            }
        }
    }
</script>
</head>
<body>
    <input id="Button1" type="button" onclick="call()" value="button" />
    <iframe id="d" src="sourceurl.html" width="100%" height=700"></iframe>
</body>
</html>

以下是我尝试点击的iframe内的链接:

<a style="text-align: left;" href="javascript:flag.closeit()" title="Flag">Flag</a>

2 个答案:

答案 0 :(得分:1)

根据您的评论,您要将不同域的内容加载到iframe中,因此由于same origin policy限制,您无法阅读该域的内容。

答案 1 :(得分:0)

以下是该问题的演示,代码主要是复制的&amp;粘贴你的问题:

http://jsfiddle.net/colllin/G2BDb/

内部iframe代码在这里:

http://jsfiddle.net/colllin/wc8Up/

正如您在单击按钮时在控制台中看到的那样,

Refused to display 'https://www.google.com/#Flag' in a frame because
    it set 'X-Frame-Options' to 'SAMEORIGIN'.

因此,如果您可以控制 iframe链接到的页面,您可以在该页面上设置X-Frame-Options标题以指定ALLOW-FROM uri (from MDN):

ALLOW-FROM uri
  The page can only be displayed in a frame on the specified origin.

或者,如果您可以控制原始iframe源(我假设您这样做,否则甚至无法访问内容,更不用说单击链接了),您可以在之前将target="_top"属性添加到链接中点击它。 这会导致链接的页面替换窗口中的顶级页面。

在这里演示:http://jsfiddle.net/colllin/G2BDb/2/