如何在同一iframe中使用target="_blank"打开链接?

3

我希望在同一iframe中用target="_blank"打开链接和iframe。 我尝试了下面的代码,但它没有起作用。 欢迎使用PHP解决方案!

<script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js" type="text/javascript"></script>


<iframe src="http://www.htmlcodetutorial.com/linking/_A_TARGET_95y98y108y97y110y107y.html" height="100%" width="100%" ></iframe>

<script>
$('iframe a[target="_blank"]').live('click',function(e){
e.preventDefault(); //stops it opening in a new window
var url = $(this).attr('href');
$('iframe').load(url);
});

</script> 

事件不会从 iframe 冒泡到父文档。 - Pointy
2
如果iframe位于不同的域名下,您将无法访问任何iframe元素。因此,在这种情况下,您的脚本将失败。 - Zain Shaikh
$("iframe").contents().find("a[target=_blank]").live(...) - Hadas
1个回答

3

你尝试过简单地更改目标属性吗?


$('iframe a[target="_blank"]').each(function () {
    $(this).attr('target', '_self');
});

此外,Zain Shaikh 是正确的。如果 iframe 的源自不同的域,则无法通过 JavaScript 进行此操作。
您仍然可以在服务器端执行此操作,但这将取决于您使用的语言。
至于本地 JavaScript 解决方案:
function replaceWithSelf () {
    var iframes = document.getElementsByTagName('iframe');
    var i = 0;
    var j = 0;
    var anchors;
    for (i = 0; i < iframes.length; i += 1) {
        anchors = iframes[i].getElementsByTagName('a');
        for (j = 0; j < anchors.length; j += 1) {
            if (anchors[j].getAttribute('target') === '_blank') {
                anchors[j].setAttribute('target', '_self');
            }
        }
    }
}

我在http://www.htmlcodetutorial.com/linking/_A_TARGET_95y98y108y97y110y107y.html上测试了相关部分(如您的问题所述)。所使用的测试代码是:

var anchors = document.getElementsByTagName('a');
for (var j = 0; j < anchors.length; j += 1) {
    if (anchors[j].getAttribute('target') === '_blank') {
        anchors[j].setAttribute('target', '_self');
    }
}

我在控制台(Google Chrome)上运行的代码成功执行了。

需要再次强调的是,如果iframe的源自不同的域,则无法通过JavaScript执行此操作。

换句话说,除非您运行代码的域名也是http://www.htmlcodetutorial.com,否则您将无法通过JavaScript执行此操作。


谢谢!例如,如何在服务器端使用 PHP 实现呢?b)当使用动态加载内容时,是否可以将页面上的所有 target="_blank" 更改为 target="_self"? - user915666
很遗憾,我对php的了解还不够,无法开始回答这个问题。我已经在你的问题中添加了php标签,希望能吸引到php专家。 - pete
谢谢,但是“anchors[j].target”似乎未定义。 - user915666
改用 getAttributesetAttribute。仍未经测试。如果有效请告知我们。 - pete
不好意思,它仍然不能正常工作,你能测试一下并展示你的测试代码吗? - user915666

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