我有一个选择框,在选择项目时调用 window.open(url)
。默认情况下,Firefox 将在新选项卡中打开该页面。但是,我希望页面在新窗口中打开,而不是在新选项卡中打开。
我怎样才能做到这一点?
为 open
调用指定窗口“功能”:
window.open(url, windowName, "height=200,width=200");
当您指定宽度/高度时,它将在新窗口而不是选项卡中打开它。
有关所有可能的功能,请参见 https://developer.mozilla.org/en-US/docs/Web/API/Window.open#Position_and_size_features。
您不需要使用高度,只需确保使用 _blank
,没有它,它会在新标签中打开。
对于空窗口:
window.open('', '_blank', 'toolbar=0,location=0,menubar=0');
对于特定的 URL:
window.open('http://www.google.com', '_blank', 'toolbar=0,location=0,menubar=0');
location=0
是必需的。
location=0
。我还建议命名窗口而不是使用 _blank
目标,这样如果用户多次单击打开弹出窗口的元素,就会再次使用同一个窗口,并与 focus()
链接,以便已经打开的弹出窗口获得焦点:window.open('http://stackoverflow.com', 'Stack_Overflow','location=0').focus();
我可能错了,但据我了解,这是由用户的浏览器偏好控制的,我不相信这可以被覆盖。
尝试:
window.open("", [window name], "height=XXX,width=XXX,modal=yes,alwaysRaised=yes");
我有一些代码可以按照您所说的进行,但是其中有很多参数。我认为这些是最低限度的,如果它不起作用,请告诉我,我会发布其余的。
好的,经过大量测试后,我的结论是:
当你执行:
window.open('www.yourdomain.tld','_blank');
window.open('www.yourdomain.tld','myWindow');
或您在目标字段中输入的任何内容,这不会改变任何内容:新页面将在新选项卡中打开(因此取决于用户偏好)
如果要在新的“真实”窗口中打开页面,则必须输入额外的参数。喜欢:
window.open('www.yourdomain.tld', 'mywindow','location=1,status=1,scrollbars=1, resizable=1, directories=1, toolbar=1, titlebar=1');
经过测试,您使用的额外参数似乎并不重要:这不是您放置“这个参数”或“另一个”创建新的“真实窗口”的事实,而是有新参数的事实(s )。
但是有些东西很困惑,可能会解释很多错误的答案:
这个:
win1 = window.open('myurl1', 'ID_WIN');
win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
和这个:
win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
win1 = window.open('myurl1', 'ID_WIN');
不会给出相同的结果。
在第一种情况下,当您第一次打开没有额外参数的页面时,它将在新选项卡中打开。在这种情况下,由于您提供的名称,第二个呼叫也将在此选项卡中打开。
在第二种情况下,由于您的第一次调用是使用额外参数进行的,因此页面将在一个新的“真实窗口”中打开。在这种情况下,即使第二次调用没有额外的参数,它也将在这个新的“真实窗口”中打开......但相同的选项卡!
这意味着第一次调用很重要,因为它决定了页面的放置位置。
您可以尝试以下功能:
<script type="text/javascript">
function open(url)
{
var popup = window.open(url, "_blank", "width=200, height=200") ;
popup.location = URL;
}
</script>
执行的 HTML 代码:
<a href="#" onclick="open('http://www.google.com')">google search</a>
popup.location = URL;
的目的是什么? window.open()
调用应将其打开到正确的 URL,并且在您的代码示例中,URL
未定义,因此它将退回到实验性(且未得到广泛支持)URL object。虽然为此使用它是有争议的,但我很好奇在这里使用它的动机是什么?
你不应该需要。允许用户拥有他们想要的任何偏好。
默认情况下,Firefox 会这样做,因为在新窗口中打开页面很烦人,如果这不是用户想要的,则永远不应该允许页面这样做。 (如果您这样设置,Firefox 确实允许您在新窗口中打开选项卡)。
关键是参数:
如果您提供参数 [ Height="" , Width="" ] ,那么它将在新窗口中打开。
如果您不提供参数,那么它将在新选项卡中打开。
在 Chrome 和 Firefox 中测试
有趣的是,我发现如果为 window.open 的第三个属性传入一个空字符串(而不是空字符串或属性列表),它将在 Chrome、Firefox 和 IE 的新选项卡中打开。如果不存在,则行为不同。
所以,这是我的新电话:
window.open(url, windowName, '');
试试那个方法.....
function popitup(url) {
//alert(url);
newwindow=window.open("http://www.zeeshanakhter.com","_blank","toolbar=yes,scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400");
newwindow.moveTo(350,150);
if (window.focus)
{
newwindow.focus()
}
return false;
}
我刚刚用 IE (11) 和 Chrome (54.0.2794.1 canary SyzyASan) 试过这个:
window.open(url, "_blank", "x=y")
...它在一个新窗口中打开。
这意味着 Clint pachl 说得对,他说提供任何一个参数都会导致新窗口打开。
- 显然它不必是一个合法的参数!
(YMMV - 正如我所说,我只在两个地方进行了测试......下一次升级可能会使结果无效,无论如何)
ETA:不过,我刚刚注意到 - 在 IE 中,窗口没有任何装饰。
对我来说,解决方案是
"location=0"
在第三个参数中。在最新的 FF/Chrome 和旧版本的 IE11 上测试
我使用的完整方法调用如下(因为我喜欢使用可变宽度):
window.open(url, "window" + id, 'toolbar=0,location=0,scrollbars=1,statusbar=1,menubar=0,resizable=1,width=' + width + ',height=800,left=100,top=50');
已回答 here。但再次发布以供参考。
如果实际点击事件没有发生,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 调用。
我认为这不是 html 目标属性问题,但您未选中 firefox“选项”菜单下“选项卡”选项卡中的“在新选项卡中打开 nw 窗口”选项。检查并重试。
https://i.stack.imgur.com/Kxx2D.png
我有同样的问题,但找到了一个相对简单的解决方案。
在 JavaScript 中,我正在检查 window.opener !=null;
以确定窗口是否为弹出窗口。如果您正在使用一些类似的检测代码来确定正在呈现您的站点的窗口是否是一个弹出窗口,您可以在想要打开一个 时轻松“关闭它”使用新窗口 JavaScript 的“新”窗口。
只需将其放在您希望始终成为“新”窗口的页面顶部即可。
<script type="text/javascript">
window.opener=null;
</script>
我在我网站的登录页面上使用它,因此如果用户使用弹出窗口导航到我的网站,他们就不会出现弹出行为。
您甚至可以创建一个简单的重定向页面来执行此操作,然后移动到您提供的 URL。就像是,
父页面上的 JavaScript:
window.open("MyRedirect.html?URL="+URL, "_blank");
然后通过使用 here 中的一些 javascript,您可以获得 URL 并重定向到它。
重定向页面上的 JavaScript:
<script type="text/javascript">
window.opener=null;
function getSearchParameters() {
var prmstr = window.location.search.substr(1);
return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
}
function transformToAssocArray( prmstr ) {
var params = {};
var prmarr = prmstr.split("&");
for ( var i = 0; i < prmarr.length; i++) {
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
}
return params;
}
var params = getSearchParameters();
window.location = params.URL;
</script>