在IFrame中更改HREF值的A HREF链接

4

在iframe中是否可以更改或附加超链接?

以下是我的代码:

 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

    <script type="text/javascript">
    function changelinks(iframe){
      var as = iframe.contentDocument.getElementsByTagName('a');
      for(i=0;i<as.length;i++){
        as[i].setAttribute('href',"http://www.yahoo.com");
      }

    }

    </script>
    </head>

    <body>
    <iframe src="http://www.google.com" onload="changelinks(this)"></iframe>

我的目标是当在 iframe 下点击任何链接时,目标 URL 将是 www.yahoo.com。

欢迎提出任何建议。 更新:我在 iframe 中获取的网站不位于我的服务器上。


这是因为iframe中的所有链接都链接到yahoo.com吗?如果是这样,请参见这里 - Wilf
@TheWobbuffet "你不能只是这样做吗,as[i].href = 'http://www.yahoo.com'?" 哈哈,谢谢。 - Nand Lal
那真的有效吗?:P - Cilan
你是否正在尝试加载外部URL?请参考@dschibait的答案。 - jaapaurelio
@jaapurelio 是的,我正在尝试加载外部URL。 - Nand Lal
显示剩余2条评论
2个回答

2

由于您正在使用jQuery。

function changelinks(iframe) {
    var frame = $( iframe ).get(0).contentDocument;

    $( 'a', frame ).click(function( event ) {
        event.preventDefault();
        location.href = 'http://yahoo.com';
    });
}

或更改元素属性:

function changelinks(iframe) {
    var frame = $( iframe ).get(0).contentDocument;

    $( 'a', frame ).each(function() {
        $(this).attr('href', 'http://yahoo.com');
    });
}

感谢您的建议,但仍然没有起作用。请注意:我在 iframe 中获取的网站不位于我的服务器上。 - Nand Lal

0

如果 iframe 的 URL 是外部 URL,那么你会遇到一个注入安全问题...

看这个:https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS 这意味着你只能访问你自己域名下的DOM。 你可以使用一些 PHP 的“代理”技巧,可以改变 href 属性,但是简单的 JavaScript 并不起作用。

(顺便说一句:有一些 Greasemonkey 的方法,但我觉得对你的网站来说不是一个选择 :))

祝好, Thomas


如果您能通过PHP代理黑客展示示例代码,我将不胜感激。 - Nand Lal
你可以使用file_get_contents()方法获取网站的HTML内容(使用URI)。现在你需要替换href值,像这样调用:$pageHTML = preg_replace('#href="(.*)"#isU', "href="" . $url . """, $pageHTML); (未经测试) - dschibait

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接