【问题标题】:How to open links in an iframe with target=“_blank” in the same iframe?如何在同一 iframe 中使用 target="_blank" 打开 iframe 中的链接?
【发布时间】:2012-02-27 07:23:54
【问题描述】:

我想打开带有 target=“_blank” 的链接和同一 iframe 中的 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 冒泡到父文档中。
  • 如果 iframe 位于 different domain 上,您将无法访问 iframe 的任何元素。所以在这种情况下你的脚本会失败。
  • $("iframe").contents().find("a[target=_blank]").live(...)

标签: php javascript iframe


【解决方案1】:

您是否尝试过简单地更改目标属性?

$('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');
    }
}

我在控制台(谷歌浏览器)中运行的。代码按预期工作。

再次重申,如果 iframe 的源代码是从不同的域加载的,您将无法通过 JavaScript 执行此操作。

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

【讨论】:

  • 谢谢!例如,如何使用 php 在服务器端进行操作? b) 使用动态加载的内容时,是否可以将页面本身的所有 target="_blank" 更改为 target="_self"?
  • 不幸的是,我对 php 的了解还不够,甚至无法开始回答这个问题。我已将 php 标签添加到您的问题中,希望能吸引 php 专家。
  • 谢谢,但“anchors[j].target”似乎未定义。
  • 改为使用getAttributesetAttribute。仍然未经测试。让我们知道这是否有效。
  • 不,很抱歉,它仍然无法正常工作,请您测试一下并显示您的测试代码好吗?
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 2013-07-22
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 2015-08-16
相关资源
最近更新 更多