Firefox不会“;正确地“;打开具有目标=“0”的链接_空白“;JavaScript在页面加载时添加的属性

Will Firefox not "correctly" open links with a target="_blank" attribute added on page load by JavaScript?

本文关键字:JavaScript 空白 加载 属性 添加 链接 正确地 不会 目标 Firefox      更新时间:2023-09-26

我使用以下代码(使用Undercore.js库)在页面加载时将属性target="_blank"rel="external"添加到所有非本地链接。我的代码如下所示:

(function($){
    $(document).ready(function(){
        // Create a matching regex pattern based on current host name
        var regexPattern = new RegExp(location.origin);
        // Gather all non-local links
        nonLocalLinks = _(jQuery('a')).reject(function(link) { 
            return link.href.match(regexPattern);
        });
        // Add attributes to all non-local links
        _(nonLocalLinks).each(function(item) { 
            item.target = '_blank'; 
            item.rel = 'external';
        });
    })
})(jQuery)

此代码在所有测试过的浏览器(Chrome 17、IE7、IE8、IE9、Safari)中都能正常工作,但在Firefox 10中不起作用。在锚点标记上设置了target="_blank"属性的链接,作为服务器函数预期的HTML输出的一部分。这对Firefox中的页面加载不起作用吗?或者我还缺少其他东西吗?

此外,我感谢所有的意见,但请不要认为这是糟糕的用户体验,等等。我同意,但我别无选择——这是为客户准备的,这是他们想要的;"否"不是一个选项。

编辑:这个"不起作用"意味着链接在同一个选项卡中打开。firebug控制台中没有错误-链接的行为就像没有设置target="_blank"一样。

Firefox在window.location上没有origin属性。这意味着你的regexPattern最终变成了//,而nonLocalLinks是空的。

演示(观看控制台):http://jsfiddle.net/ambiguous/tS4WB/

你必须用这样的东西来解释一个丢失的location.origin

var origin = location.origin;
if(!origin)
    origin = location.protocol + '//' + location.host;

演示:http://jsfiddle.net/ambiguous/envWe/

您可能还想在正则表达式中添加一个^锚,或者只检查indexOf是否为零。

如果您查看window.location上的MDN文档,您会发现支持以下属性:

  • 散列
  • 主机
  • 主机名
  • href
  • 路径名
  • 端口
  • 协议
  • 搜索

没有来源。