检查窗口是否为Popup?

时间:2012-04-20 04:44:52

标签: javascript jquery html

这个问题不是if window is popup的重复,而是类似的问题。

我正在开发一个向所有网页注入脚本的扩展程序。我需要检测窗口是否弹出。

注意: 我不是那个打开弹出窗口的人,所以上面的解决方案不起作用。

10 个答案:

答案 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”。