这个问题不是if window is popup的重复,但是类似。
我正在开发一个扩展程序,它会向所有网页注入脚本。我需要检测窗口是否为弹出窗口。
注意: 我不是打开弹出窗口的人,所以上面的解决方案行不通。
这个问题不是if window is popup的重复,但是类似。
我正在开发一个扩展程序,它会向所有网页注入脚本。我需要检测窗口是否为弹出窗口。
注意: 我不是打开弹出窗口的人,所以上面的解决方案行不通。
我发现某些浏览器在某些情况下会将 window.opener 设置为 window。这是目前我正在使用的最可靠的弹出窗口检查。
if (window.opener && window.opener !== window) {
// you are in a popup
}
window.open('example.org','the-window-name')
,可以通过if(window.opener && ... window.name === 'the-window-name')
进行检查。 - Adrian Föderwindow.opener
的值为null
。当用户被重定向到另一个域时也会出现相同的情况(参考资料)。 - Christian Davénwindow.open
打开了窗口,甚至还有其他几种情况,window.opener
也会返回true
。请注意这一点。 - phillyslick在测试Chrome、Firefox、Safari和IE8时,以下内容对我有效。无论是使用window.open()创建的窗口还是target=_blank方式打开的窗口都适用。
if (window.opener) {
alert('inside a pop-up window or target=_blank window');
} else if (window.top !== window.self) {
alert('inside an iframe');
} else {
alert('this is a top level window');
}
window.locationbar.visible
不一定只用于弹出窗口,但可以帮助检测用户是否可以通过地址栏手动更改位置...
menubar.visible
在两种情况下都是false
,因为这两种类型的弹出窗口都不显示菜单栏。但实际上,在浏览器操作情况下它是true
,因此可以用它来区分这两种扩展弹出窗口。 - jdunning(window.opener && window.opener !== window && !window.menubar.visible)
window.opener &&
这一部分是不必要的,因为如果 opener
是 null
,它就不等于 window
。 - jdunningwindow.opener &&
位是必要的。否则,当 window.opener
为 null 时,它将不等于 window,并且它会认为它是一个弹出窗口,而实际上它不是。 - Ali Saeed我正在为弹出窗口屏幕实现“关闭”按钮,为“_self”窗口实现“取消”按钮,使用的是"Typescript/Nodejs",相信它也适用于JavaScript。因此,我需要确定屏幕是否在弹出窗口中打开。
最初的回答:
if(window.opener || window.history.length === 1)
isPopupWindow = true;
else
isPopupWindow = false;
"window.opener" 在大多数浏览器上都有效,但在IE上有问题,因此为了处理IE的问题,我使用了 "window.history.length"。
最初的回答:
使用 "window.history.length" 可以解决IE中 "window.opener" 的问题。
if (window.menubar.visible)
// Not Popup
else
// Popup
window.opener
是一个布尔值,当一个窗口是弹出窗口时它的值为true
,但仅在打开它的原始窗口仍然处于打开状态时才有效。如果原始窗口已关闭,则其值为false
,因此它并不总是适用于确定一个窗口是否为弹出窗口。
window.parent != window
<a target="blank">
打开的窗口,我认为OP没有检查。 - Anthonywindow.parent != window
对于使用 window.open()
和通过 target="_blank"
打开的窗口/标签页返回相同的结果。因此,如果它是从 target="_blank"
打开的新窗口,则对于弹出窗口来说这将是一个误报,而这不是 OP 想要的。 - Anthonyif (window.opener != null)
window.opener
与 null
进行比较,而不是 undefined
。 - Christian Davén对我来说,我正在实现一个注销屏幕,可以通过window.open(..)在窗口弹出中显示,或者从单个页面内的链接中显示。
我需要确定:
1)如果我的注销屏幕在弹出窗口中,则:
event.preventDefault();
window.close();
2) 否则使用浏览器的返回功能。
window.history.back();
event.preventDefault();
if (window.history.length === 1) {
window.close();
} else {
window.history.back();
}
最好的方法是检查窗口宽度,然后尝试将窗口宽度调整一两个像素,然后检查当前宽度是否等于调整前的宽度。
换句话说,如果您成功调整了窗口大小,则可能在弹出窗口内。
祝你好运。
target=_blank
)与原始窗口没有保持关系。 - Anthony