【问题标题】:JavaScript: location.href to open in new window/tab?JavaScript:location.href 在新窗口/标签中打开?
【发布时间】:2011-07-05 17:49:09
【问题描述】:

我有一个来自第三方开发者的 JavaScript 文件。它有一个链接,用目标替换当前页面。我想在新标签页中打开此页面。

这是我目前所拥有的:

if (command == 'lightbox') {
 location.href="https://support.wwf.org.uk/earth_hour/index.php?type=individual";
}

谁能帮帮我?

【问题讨论】:

    标签: javascript window.open window.location


    【解决方案1】:
    window.open(
      'https://support.wwf.org.uk/earth_hour/index.php?type=individual',
      '_blank' // <- This is what makes it open in a new window.
    );
    

    【讨论】:

    • 值得一提:是否创建新标签页或窗口,由浏览器(设置)决定。
    • @alex 我编辑了这个答案以使重要的部分可读。如果您不同意我的格式,我可以建议缩短 URL 以便第二个参数适合展开区域吗?
    • @ErickBest 不正确。 "_blank" 保证窗口/选项卡是新的。其他任何东西(除了其他特殊名称)都给该窗口指定了特定名称,随后指向该目标的链接将重用该窗口。 jsFiddle.
    • 这只是在现代浏览器中触发弹出块通知,根本不模拟_blank锚点点击。
    • 浏览器阻止弹出窗口。
    【解决方案2】:

    您可以使用window.open('https://support.wwf.org.uk/earth_hour/index.php?type=individual'); 在新窗口中打开它。如果要在新标签中打开它,请在两个标签中打开当前页面,然后允许脚本运行,以便获得当前页面和新页面。

    【讨论】:

    • 触发 Chrome 内置的弹出窗口拦截器。
    【解决方案3】:

    如果你想使用location.href来避免弹出问题,你可以使用一个空的&lt;a&gt; ref,然后使用javascript点击它。

    类似于 HTML 的东西

    <a id="anchorID" href="mynewurl" target="_blank"></a>
    

    然后javascript点击如下

    document.getElementById("anchorID").click();
    

    【讨论】:

    • 我对这个解决方案充满希望,但它似乎仍然会触发弹出块(至少在 Chrome 中)。我有一种感觉,浏览器知道这是一个 javascript 点击,并以不同的方式对待它。
    • 谢谢内森。你说得很对。您仍然会收到一条弹出阻止消息。我以为我治好了。理论上它应该有效。安德鲁
    • $("#anchorID")[0].click(); 将此解决方案与 jquery 一起使用。
    • Lol theBell,如果你直接访问 DOM 元素,那不是 jQuery [0]
    • 这是最好的解决方案。也适用于野生动物园。
    【解决方案4】:

    例如:

        $(document).on('click','span.external-link',function(){
            var t               = $(this), 
                URL             = t.attr('data-href');        
            $('<a href="'+ URL +'" target="_blank">External Link</a>')[0].click();
    
        });
    

    工作example

    【讨论】:

    • 浏览器阻止弹出窗口。
    • 这意味着你要么有一个广告拦截器,要么有其他东西阻止它。默认行为应该在正常条件下工作
    【解决方案5】:

    window.open 的纯 js 替代

    let a= document.createElement('a');
    a.target= '_blank';
    a.href= 'https://support.wwf.org.uk/';
    a.click();
    

    这里正在工作example(stackoverflow sn-ps 不允许打开)

    【讨论】:

    • 这个解决方案。 +++
    • 在 2022 年 1 月 4 日的最新版 Chrome 中触发 Chrome 的内置弹出窗口阻止程序。
    • @Volomike 在我的 chrome 版本中是 96.0.4664.110 (Official Build) (arm64) (MacOs) - 示例有效。你的 chrome 版本是什么?
    • 我使用的是 Windows 10。版本 96.0.4664.110(官方构建)(64 位)。当我单击您的示例超链接时,Chrome 会拦截并阻止弹出窗口,并在地址栏上收到警报。 screencast.com/t/b6wA1Vay
    • 也许您启用了来自 jsfiddle.net 的弹出窗口。这可能就是您看不到弹出窗口阻止的原因。
    【解决方案6】:

    您还可以打开一个新选项卡,调用具有如下参数的操作方法:

       var reportDate = $("#inputDateId").val();
       var url = '@Url.Action("PrintIndex", "Callers", new {dateRequested = "findme"})';
       window.open(window.location.href = url.replace('findme', reportDate), '_blank');
    

    【讨论】:

    • 是否需要第一行和第二行?如果没有 reportDateurl 变量,它不会工作吗?
    • 可以取出参数(reportDate),但是url var很重要,因为它包含了对action方法的调用。
    【解决方案7】:

    location.href 的使用将在同一网页中将当前 url 替换为新 url,即https://support.wwf.org.uk/earth_hour/index.php?type=individual

    要打开一个新标签,您可以使用如下: 如果(命令 == '灯箱'){ window.open("https://support.wwf.org.uk/earth_hour/index.php?type=individual", '_blank'); }

    【讨论】:

      猜你喜欢
      • 2017-04-07
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      相关资源
      最近更新 更多