ChatGPT解决这个技术问题 Extra ChatGPT

在新选项卡(而不是新窗口)中打开 URL

我正在尝试在新标签中打开 URL,而不是弹出窗口。

我已经看到相关的问题,其中的响应看起来像:

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

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

这通常是一个偏好问题。有些人喜欢windows(并且极力保护这种行为),有些人喜欢tabs(并且极力保护这种行为)。因此,您将击败通常被认为是品味问题而不是设计问题的行为。
Javascript 对您的浏览器和选项卡与窗口一无所知,因此实际上由浏览器决定如何打开新窗口。
如何配置 Chrome 以在新选项卡中显示它,而不是弹出窗口?
Gmail 以某种方式做到了这一点,至少在 Chrome 中是这样。按住 Shift 并单击电子邮件行,然后在新窗口中打开该电子邮件。 Ctrl+单击并在新选项卡中打开它。唯一的问题:挖掘 gmail 的混淆代码是一个 PITA
@Sergio,这是任何链接的默认浏览器行为。 (至少对于 Chrome 和 Firefox。)与 Gmail 无关。

C
Community

这是一个技巧,

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

//or just
window.open(url, '_blank').focus();

在大多数情况下,这应该直接在链接的 onclick 处理程序中发生,以防止弹出窗口阻止程序和默认的“新窗口”行为。您可以这样做,或者向您的 DOM 对象添加一个事件侦听器。

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

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


不工作。在地址栏右侧收到一条消息:弹出窗口被阻止。然后我允许弹出窗口。瞧,它在弹出窗口中打开,而不是在选项卡中! OS X Lion 上的 Chrome 22.0.1229.94。
@b1naryatr0phy 那是因为您实际上没有正确测试它。更改浏览器中的设置。它是在选项卡中打开还是在窗口中打开取决于浏览器的设置。通过调用 window.open(或任何 Javascript)来选择如何打开新窗口/选项卡,您无能为力。
var win = window.open(url, '_blank'); '_blank' 不是必需的,对于 window.open(),第二个参数是 strWindowName,用于:新窗口的字符串名称。该名称可以用作链接和表单的目标,使用 <a> 的 target 属性。或<表格>元素。名称不应包含任何空白字符。请注意,strWindowName 没有指定新窗口的标题。
@hydRANger MDN 上的相同 window.open() 链接:要在每次调用 window.open() 时打开 new 窗口,请为 windowName 使用特殊值 _blank
如果有什么需要更改浏览器设置,请避免!
Q
Quentin

作者无法选择在新选项卡而不是新窗口中打开;这是用户偏好。 (请注意,大多数浏览器中的默认用户首选项是针对新选项卡的,因此在未更改该首选项的浏览器上进行的简单测试不会证明这一点。)

CSS3 提出了 target-new,但提出了 the specification was abandoned

The reverse is not true;通过在 window.open() 的第三个参数中为窗口指定某些窗口功能,您可以在偏好选项卡时触发一个新窗口。


为什么这是公认的答案?我已经测试了 duke 和 arikfr 给出的以下答案,它们在 FF、Chrome 和 Opera 中运行良好,除了 IE(它不起作用)和 Safari(它在新窗口而不是新标签中打开)。
@AliHaideri Javascript 与新选项卡/窗口的打开方式无关。这完全取决于您的浏览器设置。使用 window.open 告诉浏览器打开新内容,然后浏览器打开在其设置中选择的内容 - 选项卡或窗口。在您测试的浏览器中,将设置更改为在新窗口而不是选项卡中打开,您会看到其他人的解决方案是错误的。
有两件事比告诉他们不能做的事情更浪费别人的时间。 (1) 告诉他们不能做的事情可以做。 (2)保持沉默,让他们继续寻找方法来做一些不能做的事情。
@Luke:如果这是一个如何仅在您自己的浏览器中获得此功能的问题,那可能是 SuperUsers 网站的问题。
@Bondye — 问题是询问新标签而不是新窗口。您获得新窗口的事实是重点。
P
Peter Mortensen

如果实际点击事件没有发生,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 调用并希望在成功时打开一个窗口,请确保您在执行 Ajax 调用时设置了 async : false 选项。


很高兴将此标记为正确答案。我对 Chrome v26 (Windows) 的测试证实,如果代码在按钮的单击处理程序中,它会打开一个新选项卡,如果代码以编程方式(例如从控制台)调用,则会打开一个新窗口。
@Ian根据我对具有默认设置的浏览器的测试,此答案适用于上述答案不适用的情况。仅当用户更改了默认设置时,“您无能为力”的公认答案才成立。
@Ian为了清楚起见,我在有关用户设置的回答警告中提到了这一点。 “只要用户在浏览器中有适当的设置,这将起作用。”我认为大多数用户不会更改浏览器设置,这个答案适用于大多数用户。
async: false 在 Chrome 中不起作用。要通过回调打开一个新窗口,您需要在发送 HTTP 请求之前先打开一个空窗口,然后再更新它。这是一个good hack
不需要 e.preventDefault() 吗?
a
aljgom

这将创建一个虚拟 a 元素,为其提供 target="_blank",使其在新标签中打开,为其提供正确的 URL href,然后单击它。

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

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

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

重要的提示:

这必须在所谓的“可信事件”回调期间调用 - 例如。在点击事件期间(直接在回调函数中不需要,但在点击动作期间)。否则浏览器会阻止打开新页面

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


谢谢你。你的纯 JS 有一个缺失的部分——正如 Luke Alderton 所写(见下文),你需要将创建的元素附加到文档正文中,在你的代码中它至少在 Firefox 37 中它没有做任何事情.
@mcginniwa 像这样的任何操作 - 如果不是由鼠标单击等用户操作触发,则会变成弹出窗口阻止程序。想象一下,您可以在没有用户操作的情况下使用 Javascript 打开任何 url - 这将是非常危险的。如果您将此代码放在点击函数之类的事件中 - 它会正常工作 - 这里所有建议的解决方案都是一样的。
您可以按如下方式简化代码:$('<a />',{'href': url, 'target', '_blank'}).get(0).click();
@shaedrich 受您的剪辑启发,我添加了非 jquery 单线:Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();
在没有 rel="noreferrer" 和 rel="noopener" 的情况下使用 target="_blank" 会使网站容易受到 window.opener API 攻击(漏洞描述),但请注意,在较新的浏览器版本中设置 target="_blank" 隐式提供与设置 rel="noopener" 相同的保护。 developer.mozilla.org/en-US/docs/Web/HTML/Element/A
a
aljgom

浏览器在处理window.open方面有不同的行为

您不能期望所有浏览器的行为都相同。 window.open 不能可靠地跨浏览器在新标签页上打开弹出窗口,而且它还取决于用户的偏好。

Internet Explorer(11)上,例如用户可以选择在新窗口或新标签页中打开弹窗,不能通过window.open强制Internet Explorer 11以某种方式打开弹窗,正如 Quentin's answer 中提到的那样。

至于 Firefox (29),window.open(url, '_blank') 的行为取决于浏览器的选项卡首选项, 尽管您仍然可以通过指定宽度和高度(参见下面的“Chrome”部分)。

互联网浏览器 (11)

您可以将 Internet Explorer 设置为在新窗口中打开弹出窗口:

https://i.stack.imgur.com/IYWRUm.png

之后,尝试运行 window.open(url)window.open(url, '_blank')。观察页面在新窗口中打开,而不是在新选项卡中。

火狐 (29)

您还可以设置选项卡首选项以打开新窗口,并查看相同的结果。

铬合金

看起来 Chrome(版本 34)没有任何用于选择在新窗口或新标签页中打开弹出窗口的设置。虽然,我们讨论了一些方法(编辑注册表)in this question

在 Chrome 和 Firefox 中,指定宽度和高度将强制弹出窗口(如答案 here 中所述),即使用户已将 Firefox 设置为在新标签页中打开新窗口

let url = 'https://stackoverflow.com'
window.open(url, '', 'width=400, height=400')

但是,在 Internet Explorer 11 中,如果在浏览器首选项中选择了选项卡,则相同的代码将始终在新选项卡中打开链接,指定宽度和高度不会强制弹出新窗口。

在 Chrome 中,似乎 window.openonclick 事件中使用时会打开一个新标签,而在浏览器控制台 (as noted by other people) 中使用时会打开一个新窗口,然后弹出-ups 在指定宽度和高度时打开。

补充阅读:window.open documentation


您没有回答问题,您只是证明了 window.open 不一致。
请提供解决方案,这个“答案”寻求解决方案
M
Mohammed Safeer

如果您使用 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;
};

但是在这个问题中,他们没有提到网站作者。只想在新窗口或新标签中打开一个网址。这取决于浏览器。我们不需要担心作者。请检查那个小提琴。这是工作
发现,它在js fiddle和plunker上不起作用,但是在你创建一个html文件时起作用。是因为 js fiddle,输出显示在 iframe 上,所以新窗口因为 the request was made in a sandboxed frame whose 'allow-popups' permission is not set 而被阻塞
r
reformed

我使用以下,效果很好!

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

根据浏览器设置,这可能会在新选项卡或窗口中打开。这个问题特别是关于在新选项卡中打开,即使首选项是针对新窗口的。
没错,但正如我们已经确定的那样。在选项卡或窗口中打开是用户偏好。在新窗口或标签中打开网址的答案非常简单。
p
pseudosavant

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

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

C
Community

我认为你无法控制这一点。如果用户已将浏览器设置为在新窗口中打开链接,则您不能强制它在新选项卡中打开链接。

JavaScript open in a new window, not tab


P
Peter Mortensen

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

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

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

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

这在 Firefox 28、Chrome 34b 和 Safari 7.0.2 中作为弹出窗口被阻止,所有库存设置。 :(
“如果用户未调用该操作(单击按钮或其他内容)或者它是异步的,则无法打开新选项卡” - Chrome 为 true,但并非所有浏览器都为 true。将 <script>open('http://google.com')</script> 保存到 .html 文件并在最新版本的 Firefox 的全新安装中打开它;您会观察到 Firefox 在新选项卡中愉快地打开 Google(可能是在您告诉它允许弹出窗口之后),而不是新窗口。
a
attacomsian

是在新标签页还是新窗口中打开 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 请求回调打开新选项卡,浏览器将阻止它,因为它不是直接的用户操作。

绕过弹出窗口阻止程序并从回调中打开一个新标签,这里有一个 little hack

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

不知道为什么这被否决 - 这对我有用,似乎是在回调中打开选项卡的聪明方法。
@stevex — 它回答的问题与所提出的问题完全不同。这个答案是关于与弹出窗口阻止程序交互,而不是在发送用户的浏览器首选项以打开新窗口时打开新选项卡。
a
aljgom

只需省略 strWindowFeatures 参数将打开一个新选项卡,除非浏览器设置覆盖它(浏览器设置胜过 JavaScript)。

新窗户

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

新标签

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

- 或者 -

var myWin = window.open(strUrl);

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

根据浏览器设置,这可能会在新选项卡或窗口中打开。这个问题特别是关于在新选项卡中打开,即使首选项是针对新窗口的。
我认为这是最干净的解决方案
s
spirinvladimir
(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')))

C
Community

如果您尝试从自定义功能打开新选项卡,这与浏览器设置无关。

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

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

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

为了表现得像链接上的实际“鼠标点击”,您需要按照 @spirinvladimir's advice真正创建它:

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>

我最终选择了一个不同的解决方案,我按照 theandystratton.com/2012/… 执行 w = window.open("placeholder"); $.ajax(...ajax call that returns the url...) success (...w.location = data.url...)
@FahadAbidJanjua 这绝对不正确。它仍然取决于浏览器设置。 HTML 或 Javascript 规范中没有任何内容声明“自定义操作”必须在弹出窗口而不是选项卡中打开。事实上,我当前机器上的所有浏览器都没有显示这种行为。
P
Peter Mortensen

您可以使用 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 demo


如果您使用这种方法,请确保 url 没有查询参数,因为它们将被表单提交跳过。一种解决方案是将隐藏的输入元素嵌入到以 name 为键的表单元素中。 value 作为查询参数中所有参数的值。然后提交表格
这可以更简单地使用 a 标记而不是表单来完成,并使用 jQuery .click() 方法“提交”它。检查my answer
B
Bryan

jQuery

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

JS

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

根据浏览器设置,这可能会在新选项卡或窗口中打开。这个问题特别是关于在新选项卡中打开,即使首选项是针对新窗口的。
L
Luke Alderton

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

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);

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


P
Predrag Davidovic

不要使用 target="_blank"

在我的情况 meaningfulName 中,始终使用该窗口的特定名称,在这种情况下,您可以节省处理器资源:

button.addEventListener('click', () => {
    window.open('https://google.com', 'meaningfulName')
})

这样,当您单击按钮例如 10 次时,浏览器将始终在一个新选项卡中重新呈现它,而不是在 10 个不同的选项卡中打开它,这将消耗更多资源。

您可以在 MDN 上阅读更多相关信息。


a
aljgom

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

我找到了一个简单的解决方法:

第 1 步:创建一个不可见的链接:

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

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

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

干得好!对我很有魅力。


根据浏览器设置,这可能会在新选项卡或窗口中打开。这个问题特别是关于在新选项卡中打开,即使首选项是针对新窗口的。
a
aljgom

要打开新标签并保持在同一位置,您可以在新标签中打开当前页面,并将旧标签重定向到新网址。

let newUrl = 'http://example.com';
let currentUrl = window.location.href;    
window.open(currentUrl , '_blank'); // open window with url of current page    
location.href = newUrl; // redirect the previous window to the new url

浏览器会自动将您移动到新打开的选项卡。看起来您的页面已重新加载,您将停留在同一页面但在新窗口中

https://i.stack.imgur.com/RCgV9.gif


问题是当用户的偏好是在新窗口中打开它们时打开一个新选项卡。它不是询问如何在新选项卡中打开 URL,同时在现有选项卡中打开另一个 URL。
如果安装了广告拦截器,这将不起作用。当前标签将被广告拦截器关闭。
P
Peter Mortensen

如何创建一个 _blank 作为 target 属性值和 url 作为 href<a>,其样式为 display:hidden 并带有一个子元素?然后添加到 DOM,然后在子元素上触发 click 事件。

更新

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

亲自检查并查看:http://jsfiddle.net/4S4ET/


P
Peter Mortensen

这可能是一个 hack,但在 Firefox 中,如果您指定第三个参数“fullscreen=yes”,它会打开一个全新的窗口。

例如,

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

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


K
Kamil Kiełczewski

window.open(url) 将在新的浏览器选项卡中打开 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

这是工作 example(stackoverflow 片段不允许打开新标签)


“window.open(url) 将在新浏览器选项卡中打开 url”——它将遵循用户对新窗口或新选项卡的偏好。当首选项是窗口时,它不会强制使用新选项卡。 (这就是问题所在)。这同样适用于 target=_blank。
您建议的这两种方法在之前关于这个问题的 56 个未删除的答案中都被多次提及(和批评)。
c
c z

有很多答案副本建议使用“_blank”作为目标,但是我发现这不起作用。正如 Prakash 所说,这取决于浏览器。但是,您可以向浏览器提出某些建议,例如窗口是否应该有位置栏。

如果您提出了足够的“类似标签的东西”,您可能会得到一个标签,as per Nico's answer to this more specific question for chrome

window.open('http://www.stackoverflow.com', '_blank', 'toolbar=yes, location=yes, status=yes, menubar=yes, scrollbars=yes');

免责声明:这不是灵丹妙药。它仍然取决于用户和浏览器。现在,至少您已经为您希望窗口的外观指定了另一种偏好。


S
Smile4ever

从 Firefox (Mozilla) 扩展中打开一个新选项卡如下所示:

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

C
CG_DEV

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

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

C
Carlos Salazar

这对我有用,只是阻止事件,将 URL 添加到 <a> tag 然后触发该 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>

根据浏览器设置,这可能会在新选项卡或窗口中打开。这个问题特别是关于在新选项卡中打开,即使首选项是针对新窗口的。
v
vernonner3voltazim

我将在一定程度上同意以下人的观点(此处转述):“对于现有网页中的链接,如果新页面与相同的网站属于同一网站,则浏览器将始终在新选项卡中打开该链接。现有网页。”至少对我来说,这个“一般规则”适用于 Chrome、Firefox、Opera、IE、Safari、SeaMonkey 和 Konqueror。

无论如何,有一种不太复杂的方法可以利用其他人所呈现的内容。假设我们正在谈论您自己的网站(下面的“thissite.com”),您想要控制浏览器的操作,那么,下面,您希望“specialpage.htm”为空,其中根本没有 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
 }

2
2 revs, 2 users 69%

如果您只想打开外部链接(指向其他站点的链接),那么这部分 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');
        }
    });
});

这个回答不适合这个问题。但是,这是非常有用的思考!谢谢你的主意!