JavaScript:如何使用location.href在新窗口/标签页中打开?

506
我有一个来自第三方开发人员的 JavaScript 文件,其中有一个链接可以替换当前页面为目标页面。我希望将该页面在新选项卡中打开。
这是我目前的代码:
if (command == 'lightbox') {
 location.href="https://support.wwf.org.uk/earth_hour/index.php?type=individual";
}

有人能帮我解决问题吗?

7个回答

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

118
值得一提的是:新标签页或窗口是否被创建,由浏览器(设置)决定。 - jAndy
5
@alex,我编辑了这个答案以使关键部分易于阅读。如果您不喜欢我的格式,请缩短URL,使第二个参数适合不需要滚动的区域。 - Phrogz
7
@ErickBest 这是不正确的。"_blank"可以保证在新的窗口/选项卡中打开链接。除了其他特殊名称之外的任何其他名称都会将该窗口命名,并且对该目标的后续链接将重用该窗口。jsFiddle - alex
4
这只会在现代浏览器中触发弹出窗口阻止通知,根本不会模拟"_blank"锚点的点击。 - Nathan Hornby
34
浏览器阻止了弹出窗口。 - Jitendra Pancholi
显示剩余5条评论

50

纯js替代window.open的方法

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

这里有一个工作的示例(stackoverflow片段不允许打开)


1
这个解决方案。 - Aries
2
在2022年1月4日最新的Chrome浏览器中触发Chrome内置的弹出窗口拦截功能。 - Volomike
@Volomike 我的 Chrome 版本是 96.0.4664.110(官方版本)(arm64)(MacOs)- 示例可以正常工作。你的 Chrome 版本是多少? - Kamil Kiełczewski
我正在使用Windows 10操作系统,版本号为96.0.4664.110(官方版本)(64位)。当我点击您提供的示例超链接时,Chrome会拦截并阻止弹出窗口,并在我的地址栏上显示警报。https://www.screencast.com/t/b6wA1Vay - Volomike
也许你启用了 jsfiddle.net 的弹出窗口,这可能是你看不到弹出窗口阻止的原因。 - Volomike
1
这个解决方案比window.open更好,因为它可以在Safari中工作。 - hatched

39

如果你想使用location.href来避免弹出窗口问题,你可以使用一个空的<a>标签,然后使用JavaScript来点击它。

例如HTML中的一些内容

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

然后使用以下代码在 JavaScript 中点击它:

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

16
我对这个解决方案很有希望,但是它似乎仍然会触发弹出窗口阻止功能(至少在Chrome浏览器中)。我有一种感觉,浏览器意识到这是一个JavaScript点击事件并以不同的方式处理。 - Nathan Hornby
1
谢谢Nathan。你说得很对。你仍然会收到一个弹出阻止消息。我以为我已经解决了它。理论上它应该可以工作。安德鲁 - andrew field
2
要使用jQuery解决方案,请将以下代码翻译为中文:$("#anchorID")[0].click(); - theBell
3
笑,theBell,如果您直接访问DOM元素[0],那就不是jQuery了。 - Andre Figueiredo
这是最佳解决方案。在Safari中也可以工作。 - Vidhya
显示剩余3条评论

13

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


触发 Chrome 内置的弹出窗口拦截器。 - Volomike

8

location.href 的使用将用新的 URL(例如同一网页中的 链接)替换当前 URL。

要在新标签页中打开,请按以下操作:

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

1

例如:

    $(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


浏览器阻止了弹出窗口。 - Millar248
1
这意味着您可能使用了广告拦截器或其他阻止它的工具。在正常情况下,应该是默认行为正常工作的。 - Andrey Seregin

0

您也可以打开一个带参数的操作方法,例如:

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

第一行和第二行是必需的吗?没有 reportDateurl 变量不行吗? - Angshu31
你可以去掉参数(reportDate),但url变量很重要,因为它包含对操作方法的调用。 - Primoshenko

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