我正在尝试在新标签页中打开一个URL,而不是弹出窗口。
我看到了类似的问题,其响应大致如下:
window.open(url,'_blank');
window.open(url);
但是这些方法都没有对我起作用,浏览器仍然试图打开一个弹出窗口。
我正在尝试在新标签页中打开一个URL,而不是弹出窗口。
我看到了类似的问题,其响应大致如下:
window.open(url,'_blank');
window.open(url);
但是这些方法都没有对我起作用,浏览器仍然试图打开一个弹出窗口。
这是一个技巧,
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>
作者无法选择在新窗口而非新标签页中打开链接,这是用户偏好。(需要注意的是,在大多数浏览器中默认的用户偏好是使用新标签页打开,因此在那些未更改偏好设置的浏览器上进行的简单测试可能无法证明这一点。)
CSS3 提出了 target-new,但该规范已被放弃。
反过来则不成立:通过在 window.open()
的第三个参数中指定某些窗口特性,您可以在偏好为标签页的情况下触发新窗口的打开。
window.open
告诉浏览器打开新内容,然后浏览器会根据设置打开选项卡或窗口。在你测试的浏览器中,将设置更改为在新窗口中打开而不是选项卡,你会发现其他人的解决方案是错误的。 - Ianwindow.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调用。
这会创建一个虚拟的 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");
这个函数必须在所谓的“可信事件”回调中被调用,例如在单击事件期间(不一定直接在回调函数中,但在单击操作期间)。否则,浏览器会阻止打开新页面。
如果您在某个随机时刻手动调用它(例如在间隔或服务器响应之后),它可能会被浏览器阻止(这是有道理的,因为它可能会导致安全风险并影响用户体验)。
$('<a />', {'href': url, 'target': '_blank'})[0].click();
- shaedrichObject.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();
- Adam Pietrasiak浏览器对于如何处理window.open
有不同的行为
你不能指望所有浏览器都有相同的行为。在不同的浏览器中,window.open
无法可靠地在新标签页中打开弹出窗口,而这还取决于用户的偏好。
例如,在Internet Explorer(11)中,用户可以选择在新窗口或新标签页中打开弹出窗口。你不能通过window.open
强制Internet Explorer 11以某种方式打开弹出窗口,正如Quentin的回答所暗示的那样。
至于Firefox(29),window.open(url,'_blank')
的行为取决于浏览器的标签页首选项,但你仍然可以通过指定宽度和高度来强制在弹出窗口中打开URL(请参见下面的“Chrome”部分)。
Internet Explorer(11)
你可以设置Internet Explorer在新窗口中打开弹出窗口:
在这样做后,尝试运行window.open(url)
和window.open(url, '_blank')
。注意页面会在新窗口中打开,而不是新标签页。
Firefox(29)
你也可以设置选项来在新窗口中打开标签页,然后看到相同的结果。
Chrome
据说Chrome(版本34)没有任何设置来选择在新窗口或新标签页中打开弹出窗口。虽然在这个问题中讨论了一些方法(如编辑注册表)。
在Chrome和Firefox中,指定宽度和高度将强制弹出窗口(如这里的答案中所述),即使用户已将Firefox设置为在新标签页中打开新窗口。
let url = 'https://stackoverflow.com'
window.open(url, '', 'width=400, height=400')
然而,在 Internet Explorer 11 中,如果在浏览器偏好设置中选择了选项卡,相同的代码将始终在新标签页中打开链接,指定宽度和高度将不会强制弹出新窗口。
在 Chrome 中,使用window.open
在onclick
事件中使用时会打开新标签页,在浏览器控制台中使用时会打开新窗口(如其他人所指出),当指定宽度和高度时,将弹出弹出窗口。
更多阅读:window.open
文档。
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;
};
为了详细说明Steven Spielberg的答案,我在这种情况下这样做:
$('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();
我使用以下代码,它运行得非常好!
window.open(url, '_blank').focus();
$.ajax({
url: "url",
type: "POST",
success: function() {
window.open('url', '_blank');
}
});
但是根据浏览器设置,这可能会在新标签页中打开:
$.ajax({
url: "url",
type: "POST",
async: false,
success: function() {
window.open('url', '_blank');
}
});
<script>open('http://google.com')</script>
保存到.html
文件中,并在最新版本的Firefox中进行全新安装后打开它;您会发现Firefox可以愉快地在新标签页中打开Google(也许在您允许弹出窗口之后),而不是在新窗口中打开。 - Mark Amery