这个问题不是if window is popup的重复,而是类似的问题。
我正在开发一个向所有网页注入脚本的扩展程序。我需要检测窗口是否弹出。
注意: 我不是那个打开弹出窗口的人,所以上面的解决方案不起作用。
答案 0 :(得分:23)
我发现某些浏览器会在某些情况下将window.opener设置为window。这是我现在使用的最可靠的弹出式检查。
if (window.opener && window.opener !== window) {
// you are in a popup
}
答案 1 :(得分:19)
在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');
}
答案 2 :(得分:4)
window.locationbar.visible
不一定仅用于弹出窗口,但可以帮助检测用户是否可以通过位置栏手动更改位置...
答案 3 :(得分:1)
如果window是弹出窗口或子帧,则以下语句将成立:
window.parent != window
答案 4 :(得分:1)
为什么不检查开启者是否未定义?弹出窗口有一个开启者,而普通页面没有。
if (window.opener != null)
答案 5 :(得分:1)
我使用此代码来确定弹出窗口
(window.opener && window.opener !== window && !window.menubar.visible)
答案 6 :(得分:0)
这不是一种确定的防火方法,但通常使用window.open()
的弹出窗口不会指向新的URL,因此两个窗口都具有相同的href。因此,在许多情况下:
window.location.href == window.opener.location.href
对于弹出窗口,将是真的。所以你可以这样做:
var isPopup = (window.location.href == window.opener.location.href);
就像我说的,这适用于我的有限测试,因此可能会有一些反馈显示这不可靠。
答案 7 :(得分:0)
最好的方法,只是检查窗口宽度,然后尝试以一两个像素调整窗口宽度,然后检查当前宽度是否等于调整大小之前的宽度
换句话说,如果你成功调整了窗口的大小,你可能会在弹出窗口内。
祝你好运。答案 8 :(得分:0)
对我来说,我正在实现一个Logout屏幕,该屏幕可以通过window.open(..)或单页内的链接显示在窗口弹出窗口中。
我需要确定:
1)如果我的Logout屏幕在弹出窗口内,则:
event.preventDefault();
window.close();
2)否则使用浏览器返回功能..
window.history.back();
我的解决方案: 如果页面在弹出窗口内,在我的情况下,它的窗口页面历史记录为1:
event.preventDefault();
if (window.history.length === 1) {
window.close();
} else {
window.history.back();
}
答案 9 :(得分:0)
我在“ Typescript / Nodejs”中实现了用于弹出窗口屏幕的'关闭'按钮和'_self'窗口的'取消'按钮,并相信它也适用于JavaScript。 所以我需要确定屏幕是否在弹出窗口中打开
for
“ window.opener”适用于几乎所有浏览器,但IE出现问题,因此为了处理IE问题,我使用了“ window.history.length”。