在新标签页(而不是新窗口)中打开URL


2101

我正在尝试在新选项卡(而不是弹出窗口)中打开URL

我看过相关的问题,答案看起来像这样:

window.open(url,'_blank');
window.open(url);

但是它们都不适合我,浏览器仍然尝试打开一个弹出窗口。


85
这通常是一个优先事项。有些人喜欢窗户(并严格保护这种行为),有些标签(并严格保护这种行为)。因此,您将击败通常被认为是品味而非设计问题的行为。
贾里德·法瑞希

42
Javascript对您的浏览器以及选项卡和窗口一无所知,因此,实际上由浏览器决定如何打开新窗口。
安德烈

3
如何配置Chrome在新标签页(而不是弹出窗口)中显示它?
标记

8
Gmail至少可以在Chrome中做到这一点。Shift +单击电子邮件行,然后在新窗口中打开该电子邮件。Ctrl +单击,然后在新选项卡中将其打开。唯一的问题:深入研究gmail的混淆代码是PITA
Sergio

48
@Sergio,这是任何链接的默认浏览器行为。(至少适用于Chrome和Firefox。)与Gmail无关。
Qtax

Answers:


928

作者无法选择在新标签页中打开,而不是在新窗口中打开。这是用户的偏爱。(请注意,大多数浏览器中的默认用户首选项是针对新标签页的,因此在未更改首选项的浏览器中进行的琐碎测试将无法证明这一点。)

CSS3提出了新的目标,但是该规范被放弃了

反向是不正确的; 通过在的第三个参数中指定窗口的尺寸window.open(),可以在选项卡的首选项触发新窗口。


42
@AliHaideri Javascript与打开新标签页/窗口的方式无关。这完全取决于浏览器的设置。使用window.open告诉浏览器打开一些新内容,然后浏览器打开在其设置中选择的内容-选项卡或窗口。在经过测试的浏览器中,更改设置以在新窗口中打开而不是在选项卡中打开,您会看到其他人的解决方案是错误的。
2013年

239
有两件事比告诉别人某些事情更浪费别人的时间,这是无法完成的。(1)告诉他们的东西,不能做可以做到。(2)保持沉默,让他们继续寻找做某事无法完成的方法。
Quentin

8
@Cupcake —文档通常不会费心描述不存在的功能。evernote.com/shard/s3/sh/428d2d68-39f9-491d-8352-8a9c217b67d7/…–
Quentin

9
@Neel-因为它很简洁地达到了很多人想知道的话题。
昆汀

4
作者可以做一些事情(主要是编写不同的代码)。这些东西都不会触发标签页而不是窗口。
昆汀

1733

这是一个把戏

function openInNewTab(url) {
  var win = window.open(url, '_blank');
  win.focus();
}

在大多数情况下,这应该直接在onclick链接的处理程序中进行,以防止弹出窗口阻止程序和默认的“新窗口”行为。您可以通过这种方式或通过向DOM对象添加事件侦听器来实现。

<div onclick="openInNewTab('www.test.com');">Something To Click On</div>

http://www.tutsplanet.com/open-url-new-tab-using-javascript/


117
不起作用。在地址栏的右侧收到一条消息:弹出窗口被阻止。然后,我允许弹出窗口。而且,它会在弹出窗口中打开,而不是在选项卡中!OS X Lion上的Chrome 22.0.1229.94。
2012年

39
@ b1naryatr0phy那是因为您实际上没有对其进行正确的测试。在浏览器中更改设置。是否在选项卡或窗口中打开取决于浏览器的设置。调用window.open(或任何Javascript)以选择如何打开新窗口/标签,您无能为力。
2013年

问题:我设置的URL没有协议(例如,my.site.com / Controller / Index)。结果,我通过URL获得新窗口(选项卡),例如当前页面的URL(从那里我使用OpenInNewTab函数),再传入函数URL。带有协议的窗口将通过正确的链接打开。为什么?
user2167382 2014年

2
var win = window.open(url,'_blank'); 对于window.open(),不需要“ _blank” ,第二个参数是strWindowName,用于:新窗口的字符串名称。该名称可以使用<a>或<form>元素的target属性用作链接和表单的目标。该名称不应包含任何空格字符。请注意,strWindowName不指定新窗口的标题。
hydRAnger

有什么方法可以使它成为沙盒iframe而无需打开新标签页?使用此方法时,我收到CORS错误,因为document.domain值未更改,因为它是作为iframe打开的。
Ids van der Zee

380

window.open()如果在实际的点击事件中没有发生,则不会在新标签中打开。在给出的示例中,URL是在实际单击事件上打开的。只要用户在浏览器中进行了适当的设置,这将起作用

<a class="link">Link</a>
<script  type="text/javascript">
     $("a.link").on("click",function(){
         window.open('www.yourdomain.com','_blank');
     });
</script>

同样,如果您尝试在click函数中进行Ajax调用,并希望成功打开一个窗口,请确保您正在使用async : false选项集进行Ajax调用。


28
将这个标记为正确答案会很好。我使用Chrome v26(Windows)进行的测试确认,如果代码位于按钮的单击处理程序内,则它将打开一个新选项卡,并且如果以编程方式(例如从控制台)调用该代码,则它将打开一个新窗口。
Cyber​​Fonic

2
@Ian根据我在具有默认设置的浏览器上的测试,此答案在以上答案无效的情况下有效。仅当用户更改了默认设置时,才说“没有什么可以做”的已接受答案是正确的。
加菲猫

@Ian为了清楚起见,我在回答有关用户设置的警告时提到了这一点。“只要用户在浏览器中进行了适当的设置,这将起作用。” 我认为大多数用户都不会更改浏览器设置,并且此答案适用于大多数用户。
Venkat Kotra

async: false在Chrome中不起作用。要从回调中打开一个新窗口,您需要先打开一个空窗口,然后再发送HTTP请求并随后对其进行更新。这是一个很好的技巧
attacomsian

250

window.open 无法在所有浏览器的新选项卡中可靠地打开弹出窗口

不同的浏览器 window.open 以不同的方式实现行为,尤其是在用户的浏览器首选项方面。您不能期望window.open在所有Internet Explorer,Firefox和Chrome上都具有相同的行为,因为它们处理用户浏览器首选项的方式不同。

例如,Internet Explorer(11)用户可以选择在新窗口或新标签页中打开弹出窗口 window.open,而不能像Quentin的答案中所提到的那样强制Internet Explorer 11用户通过某种方式打开弹出窗口

对于Firefox(29)用户,使用方法window.open(url, '_blank') 取决于其浏览器的选项卡首选项,尽管您仍然可以通过指定宽度和高度来强迫他们在新窗口中打开弹出窗口(请参阅下面的“ Chrome的功能是什么?”一节)。

示范

转到浏览器的设置并将其配置为在新窗口中打开弹出窗口。

Internet Explorer(11)

Internet Explorer设置对话框1

Internet Explorer选项卡设置对话框

测试页

如上所述,将Internet Explorer(11)设置为在新窗口中打开弹出窗口后,请使用以下测试页进行测试window.open

<!DOCTYPE html>
<html>
  <head>
    <title>Test</title>
  </head>

  <body>
    <button onclick="window.open('https://stackoverflow.com/q/4907843/456814');">
      <code>window.open(url)</code>
    </button>
    <button onclick="window.open('https://stackoverflow.com/q/4907843/456814', '_blank');">
      <code>window.open(url, '_blank')</code>
    </button>
  </body>
</html>

请注意,弹出窗口是在新窗口而不是新选项卡中打开的

您还可以在Firefox(29)中测试这些摘要,并将其选项卡首选项设置为新窗口,并查看相同的结果。

那Chrome呢?它的实现方式window.open不同于Internet Explorer(11)和Firefox(29)。

我不确定100%,但是Chrome(版本34.0.1847.131 m)似乎没有用户可以用来选择是否在新窗口或新标签页(例如Firefox和Internet Explorer)中打开弹出窗口的任何设置有)。我检查了Chrome文档中有关管理弹出窗口的内容,但未提及任何有关此类内容的信息。

同样,不同的浏览器似乎再次实现了 window.open 不同的行为在Chrome和Firefox中,即使用户已将Firefox(29)设置为在新标签页中打开新窗口(如JavaScript的回答在新窗口中打开,而不是标签页中所述),指定宽度和高度也会强制弹出窗口。

<!DOCTYPE html>
<html>
  <head>
    <title>Test</title>
  </head>

  <body>
    <button onclick="window.open('https://stackoverflow.com/q/4907843/456814', 'test', 'width=400, height=400');">
      <code>window.open(url)</code>
    </button>
  </body>
</html>

但是,如果用户将选项卡设置为浏览器首选项,则以上相同的代码段将始终在Internet Explorer 11中打开一个新选项卡,即使未指定宽度和高度也将为其强制弹出新窗口。

因此window.open,Chrome浏览器中的行为似乎是在onclick事件中使用时在新选项卡中打开弹出窗口,在浏览器控制台中使用时(如其他人所述)在新窗口中打开弹出窗口,并在事件发生时在新窗口中打开弹出窗口。指定宽度和高度。

摘要

window.open 对于用户的浏览器首选项,不同的浏览器实现不同的行为您不能期望window.open在所有Internet Explorer,Firefox和Chrome上都具有相同的行为,因为它们处理用户浏览器首选项的方式不同。

附加阅读


12
您没有回答问题,只是证明了window.open是不一致的。
BentOnCoding

223

一班轮:

Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();

它创建一个虚拟a元素,将其赋予它target="_blank"以便在新选项卡中打开,赋予它适当的属性url href,然后单击它。

如果需要,您可以基于此创建一些功能:

function openInNewTab(href) {
  Object.assign(document.createElement('a'), {
    target: '_blank',
    href,
  }).click();
}

然后您可以像这样使用它:

openInNewTab("https://google.com"); 

重要的提示:

openInNewTab(以及此页面上的任何其他解决方案)必须在用户操作回调期间调用-例如 内部点击事件(直接在回调函数中不是必需的,而是在点击操作期间)。

如果您在某个随机时刻(例如,在某个时间间隔内或在服务器响应后)手动调用它-它可能会被浏览器阻止(这很有意义,因为这会带来安全风险,并且可能会导致非常差的用户体验) )


8
谢谢。您的纯JS缺少一部分-正如Luke Alderton所写(请参见下文),您需要将创建的元素附加到文档主体,在代码中,它悬挂在空隙中,至少在Firefox 37中,它什么都不做。
greenoldman

4
@mcginniwa像这样的任何操作-如果不是由诸如鼠标单击之类的用户操作触发的,则将变为弹出窗口阻止程序。想象一下,您可以使用Javascript打开任何URL,而无需用户进行操作-这将非常危险。如果将这段代码放在诸如click函数之类的事件中-它将正常工作-与此处提出的所有解决方案相同。
pie6k 2015年

4
您可以按如下方式简化代码: $('<a />',{'href': url, 'target', '_blank'}).get(0).click();
shaedrich

5
@shaedrich受您的sn窃启发,我添加了非jquery Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();
单线

在FF中不起作用!
Nolesh

91

如果您使用window.open(url, '_blank'),它将在Chrome上被阻止(弹出窗口阻止程序)。

尝试这个:

//With JQuery

$('#myButton').click(function () {
    var redirectWindow = window.open('http://google.com', '_blank');
    redirectWindow.location;
});

使用纯JavaScript,

document.querySelector('#myButton').onclick = function() {
    var redirectWindow = window.open('http://google.com', '_blank');
    redirectWindow.location;
};

但是在这个问题上,他们没有提到网站作者。只想在新窗口或新标签页中打开一个网址。这取决于浏览器。我们不需要为作者烦恼。请检查那个小提琴。它正在工作
Mohammed Safeer

发现,它不适用于js小提琴和plunker,但是在创建html文件时有效。这是因为js提琴,输出显示在iframe上,所以新窗口被阻止了the request was made in a sandboxed frame whose 'allow-popups' permission is not set
Mohammed Safeer

67

为了详细说明史蒂芬·斯皮尔伯格的答案,我在这种情况下这样做:

$('a').click(function() {
  $(this).attr('target', '_blank');
});

这样,在浏览器将跟随链接之前,我正在设置目标属性,因此它将使链接在新的标签或窗口中打开(取决于用户的设置))。

jQuery中的一行示例:

$('a').attr('target', '_blank').get(0).click();
// The `.get(0)` must be there to return the actual DOM element.
// Doing `.click()` on the jQuery object for it did not work.

也可以仅使用本机浏览器DOM API来完成此操作:

document.querySelector('a').setAttribute('target', '_blank');
document.querySelector('a').click();

57

我使用以下方法,效果很好!

window.open(url, '_blank').focus();

2
这可能会在新标签页或窗口中打开,具体取决于浏览器设置。问题特别是关于即使在首选项是针对新窗口的情况下在新选项卡中打开。
昆汀


19

一个有趣的事实是,如果用户未调用操作(单击按钮或其他操作)或异步操作,则无法打开新选项卡,例如,它将不会在新选项卡中打开:

$.ajax({
    url: "url",
    type: "POST",
    success: function() {
        window.open('url', '_blank');              
    }
});

但这可能会在新选项卡中打开,具体取决于浏览器设置:

$.ajax({
    url: "url",
    type: "POST",
    async: false,
    success: function() {
        window.open('url', '_blank');              
    }
});

2
在Firefox 28,Chrome 34b和Safari 7.0.2中,所有的库存设置都将其作为弹出窗口阻止。:(
史蒂夫·迈斯纳

1
“如果用户未调用该操作(单击按钮或其他操作)或该操作是异步的,则无法打开新选项卡” -Chrome确实如此,但并非所有浏览器都正确。保存<script>open('http://google.com')</script>.html文件中,然后以最新版本的Firefox的全新安装打开它;您会发现Firefox会在新标签页(可能在您告诉它允许弹出窗口之后)而不是新窗口中愉快地打开Goog​​le。
Mark Amery

13

仅忽略[strWindowFeatures]参数将打开一个新选项卡,除非浏览器设置被覆盖(浏览器设置优先于JavaScript)。

新窗户

var myWin = window.open(strUrl, strWindowName, [strWindowFeatures]);

新标签

var myWin = window.open(strUrl, strWindowName);

- 要么 -

var myWin = window.open(strUrl);

11
(function(a){
document.body.appendChild(a);
a.setAttribute('href', location.href);
a.dispatchEvent((function(e){
    e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null);
    return e
}(document.createEvent('MouseEvents'))))}(document.createElement('a')))

11

您可以使用以下技巧form

$(function () {
    $('#btn').click(function () {
        openNewTab("http://stackoverflow.com")
        return false;
    });
});

function openNewTab(link) {
    var frm = $('<form   method="get" action="' + link + '" target="_blank"></form>')
    $("body").append(frm);
    frm.submit().remove();
}

jsFiddle演示


4
如果您采用这种方法,请确保该网址没有查询参数,因为它们会被表单提交跳过。一种解决方案是将隐藏的输入元素嵌入到表单元素中,这些元素具有查询参数中所有参数的name键和value值。然后提交表格
Mudassir Ali

可以使用a标记而不是表单来简单地完成此操作,并使用jQuery .click()方法“提交”它。检查我的答案

10

这与浏览器设置无关如果您试图通过自定义功能打开新标签页,则。

在此页面中,打开一个JavaScript控制台并键入:

document.getElementById("nav-questions").setAttribute("target", "_blank");
document.getElementById("nav-questions").click();

而且,无论您的设置如何,它都会尝试打开弹出窗口,因为“点击”来自自定义操作。

为了表现得像链接上的实际“鼠标单击”,您需要遵循@spirinvladimir的建议真正创建它:

document.getElementById("nav-questions").setAttribute("target", "_blank");
document.getElementById("nav-questions").dispatchEvent((function(e){
  e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0,
                    false, false, false, false, 0, null);
  return e
}(document.createEvent('MouseEvents'))));

这是一个完整的示例(不要在jsFiddle或类似的在线编辑器上尝试它,因为它不会让您从那里重定向到外部页面):

<!DOCTYPE html>
<html>
<head>
  <style>
    #firing_div {
      margin-top: 15px;
      width: 250px;
      border: 1px solid blue;
      text-align: center;
    }
  </style>
</head>
<body>
  <a id="my_link" href="http://www.google.com"> Go to Google </a>
  <div id="firing_div"> Click me to trigger custom click </div>
</body>
<script>
  function fire_custom_click() {
    alert("firing click!");
    document.getElementById("my_link").dispatchEvent((function(e){
      e.initMouseEvent("click", true, true, window, /* type, canBubble, cancelable, view */
            0, 0, 0, 0, 0,              /* detail, screenX, screenY, clientX, clientY */
            false, false, false, false, /* ctrlKey, altKey, shiftKey, metaKey */
            0, null);                   /* button, relatedTarget */
      return e
    }(document.createEvent('MouseEvents'))));
  }
  document.getElementById("firing_div").onclick = fire_custom_click;
</script>
</html>

1
我最终w = window.open("placeholder"); $.ajax(...ajax call that returns the url...) success (...w.location = data.url...)根据theandystratton.com/2012/…
Paul Tomblin

11
@FahadAbidJanjua绝对正确。它仍然取决于浏览器设置。HTML或Javascript规范中没有任何内容声明必须在弹出窗口(而不是选项卡)中打开“自定义操作”。确实,当前计算机上的所有浏览器均未显示此行为。
nmclean 2014年

7
function openTab(url) {
  const link = document.createElement('a');
  link.href = url;
  link.target = '_blank';
  document.body.appendChild(link);
  link.click();
  link.remove();
}

1
这可能会在新标签页或窗口中打开,具体取决于浏览器设置。问题特别是关于即使在首选项是针对新窗口的情况下在新选项卡中打开。
昆汀

3

jQuery查询

$('<a />',{'href': url, 'target': '_blank'}).get(0).click();

JS

Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();

这可能会在新标签页或窗口中打开,具体取决于浏览器设置。问题特别是关于即使在首选项是针对新窗口的情况下在新选项卡中打开。
昆汀

2

或者您可以只创建一个链接元素并单击它...

var evLink = document.createElement('a');
evLink.href = 'http://' + strUrl;
evLink.target = '_blank';
document.body.appendChild(evLink);
evLink.click();
// Now delete it
evLink.parentNode.removeChild(evLink);

不应被任何弹出窗口阻止程序阻止...希望如此。


2

这个问题有一个答案,但不是。

我发现一个简单的解决方法:

步骤1:建立不可见的连结:

<a id="yourId" href="yourlink.html" target="_blank" style="display: none;"></a>

步骤2:以编程方式单击该链接:

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

干得好!为我工作的魅力。


这可能会在新标签页或窗口中打开,具体取决于浏览器设置。问题特别是关于即使在首选项是针对新窗口的情况下在新选项卡中打开。
昆汀

1

在此处输入图片说明

我研究了很多有关如何打开新选项卡并保持在同一选项卡上的信息。我发现了一个小窍门。假设您有需要打开的url - newUrl和旧的url- currentUrl,在打开新选项卡后需要保留它们。JS代码如下所示:

// init urls
let newUrl = 'http://example.com';
let currentUrl = window.location.href;
// open window with url of current page, you will be automatically moved 
// by browser to a new opened tab. It will look like your page is reloaded
// and you will stay on same page but with new page opened
window.open(currentUrl , '_blank');
// on your current tab will be opened new url
location.href = newUrl;

问题是,当用户的偏好是在新窗口中打开它们时,打开一个新选项卡。它不问如何在现有选项卡中同时打开另一个URL的同时在新选项卡中打开URL。
昆汀

0

如何创建一个<a>with _blankas target属性值和urlashref和带display样式,以及子元素的隐藏?然后添加到DOM,然后在children元素上触发click事件。

更新

那不行 浏览器阻止默认行为。它可以通过编程方式触发,但不会遵循默认行为。

亲自检查一下:http : //jsfiddle.net/4S4ET/


-1

从Firefox(Mozilla)扩展程序中打开一个新标签是这样的:

gBrowser.selectedTab = gBrowser.addTab("http://example.com");

-1

这种方式与上述解决方案类似,但实现方式不同

.social_icon->一些带有CSS的类

 <div class="social_icon" id="SOME_ID" data-url="SOME_URL"></div>


 $('.social_icon').click(function(){

        var url = $(this).attr('data-url');
        var win = window.open(url, '_blank');  ///similar to above solution
        win.focus();
   });

-1

这可能是黑客,但是在Firefox中,如果您指定第三个参数'fullscreen = yes',则会打开一个新窗口。

例如,

<a href="#" onclick="window.open('MyPDF.pdf', '_blank', 'fullscreen=yes'); return false;">MyPDF</a>

它似乎实际上覆盖了浏览器设置。


-1

对我来说,这项工作只是防止事件发生,将URL添加到,<a> tag然后在上触发click事件tag

Js
$('.myBtn').on('click', function(event) {
        event.preventDefault();
        $(this).attr('href',"http://someurl.com");
        $(this).trigger('click');
});
HTML
<a href="#" class="myBtn" target="_blank">Go</a>

这可能会在新标签页或窗口中打开,具体取决于浏览器设置。问题特别是关于即使在首选项是针对新窗口的情况下在新选项卡中打开。
昆汀

-1

window.open(url)会在新的浏览器标签页中打开链接。下方的JS替代品

let a= document.createElement('a');
a.target= '_blank';
a.href= 'https://support.wwf.org.uk/';
a.click(); // we don't need to remove 'a' from DOM because we not add it

这是工作示例(stackoverflow代码段不允许打开新标签页)


“ window.open(url)将在新的浏览器选项卡中打开url” —它将遵循用户对新窗口或新选项卡的偏好。当首选窗口时,它不会强制使用新标签。(问题是什么)。这同样适用于target = _blank。
昆汀

在此问题的前56个未删除的答案中,您建议的两种方法都已多次提及(和批评)。
昆汀

-1

是否在新标签页或新窗口中打开URL,实际上是由用户的浏览器首选项控制的。无法在JavaScript中覆盖它。

window.open()行为取决于使用方式。如果调用它是用户操作的直接结果,我们可以说单击按钮,它应该可以正常工作并打开一个新的标签页(或窗口):

const button = document.querySelector('#openTab');

// add click event listener
button.addEventListener('click', () => {
    // open a new tab
    const tab = window.open('https://attacomsian.com', '_blank');
});

但是,如果您尝试从AJAX请求回调中打开新标签,则浏览器将阻止它,因为这是直接的用户操作。

绕过弹出窗口阻止程序并从回调中打开新选项卡,这里有一点技巧

const button = document.querySelector('#openTab');

// add click event listener
button.addEventListener('click', () => {

    // open an empty window
    const tab = window.open('about:blank');

    // make an API call
    fetch('/api/validate')
        .then(res => res.json())
        .then(json => {

            // TODO: do something with JSON response

            // update the actual URL
            tab.location = 'https://attacomsian.com';
            tab.focus();
        })
        .catch(err => {
            // close the empty window
            tab.close();
        });
});

-1

我尝试过这种方式,似乎工作正常

window.open('example.com', 'newWin');

我在这里找到了许多工作示例:

http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html#TestPopupControl


这将根据用户的喜好在新的标签或窗口中打开。它不会强制使用新标签页,这就是问题所在。
昆汀


@Quentin我错过了那部分,但是当我尝试使用第二个参数«windowName»等于__blank或根本没有它调用window.open时,弹出窗口或新选项卡没有出现在最新的Google Chrome浏览器中。当我将窗口名称更改为«newWin»时,打开了一个新选项卡。奇怪的是,窗口名称参数是可选的。
Artem Shevtsov

-4

我会与写此书的人有些同意(在这里改写):“对于现有网页中的链接,如果新网页与现有网页。” 至少对我而言,此“通用规则”适用于Chrome,Firefox,Opera,IE,Safari,SeaMonkey和Konqueror。

无论如何,有一种不太复杂的方法可以利用其他人的介绍。假设我们正在谈论您自己的网站(下面的“ thissite.com”),您要在其中控制浏览器的工作,然后在下面,您要使“ specialpage.htm”成为EMPTY,而其中根本没有HTML(节省了从服务器发送数据的时间!)。

 var wnd, URL;  //global variables

 //specifying "_blank" in window.open() is SUPPOSED to keep the new page from replacing the existing page
 wnd = window.open("http://www.thissite.com/specialpage.htm", "_blank"); //get reference to just-opened page
 //if the "general rule" above is true, a new tab should have been opened.
 URL = "http://www.someothersite.com/desiredpage.htm";  //ultimate destination
 setTimeout(gotoURL(),200);  //wait 1/5 of a second; give browser time to create tab/window for empty page


 function gotoURL()
 { wnd.open(URL, "_self");  //replace the blank page, in the tab, with the desired page
   wnd.focus();             //when browser not set to automatically show newly-opened page, this MAY work
 }

-7

如果您只想打开外部链接(链接到其他站点的链接),那么此JavaScript / jQuery效果很好:

$(function(){
    var hostname = window.location.hostname.replace('www.', '');
    $('a').each(function(){
        var link_host = $(this).attr('hostname').replace('www.', '');
        if (link_host !== hostname) {
            $(this).attr('target', '_blank');
        }
    });
});

这个回答不适合这个问题。但是,这是非常有用的想法!谢谢您的想法!
Nuri Akman 2014年

-9

如果链接在同一域(在同一网站上),则浏览器将始终在新选项卡中打开该链接。如果该链接位于其他域上,则将在新标签页/窗口中打开它,具体取决于浏览器设置。

因此,根据此,我们可以使用:

<a class="my-link" href="http://www.mywebsite.com" rel="http://www.otherwebsite.com">new tab</a>

并添加一些jQuery代码:

jQuery(document).ready(function () {
    jQuery(".my-link").on("click",function(){
        var w = window.open('http://www.mywebsite.com','_blank');
        w.focus();
        w.location.href = jQuery(this).attr('rel');
        return false;
    });
});

因此,首先使用_blank目标在同一网站上打开新窗口(它将在新标签页中打开),然后在该新窗口中打开所需的网站。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.