29

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

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

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

4

10 回答 10

33

我发现某些浏览器会在某些情况下将 window.opener 设置为 window。这是我现在使用的最可靠的弹出检查。

if (window.opener && window.opener !== window) {
  // you are in a popup
}
于 2015-06-16T17:11:09.483 回答
20

在 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');
}
于 2013-06-19T18:00:49.017 回答
4

window.locationbar.visible不一定只用于弹出窗口,但可以帮助检测用户是否可以通过位置栏手动更改位置......

于 2012-11-03T03:24:30.033 回答
3

我使用此代码来确定弹出窗口

(window.opener && window.opener !== window && !window.menubar.visible)
于 2020-01-08T03:40:40.190 回答
1

如果 window 是弹出窗口或子框架,则以下语句将成立:

 window.parent != window
于 2012-04-20T04:58:57.393 回答
1

为什么不检查开瓶器是否未定义?弹出窗口有一个开启器,而常规页面没有。

if (window.opener != null) 
于 2013-10-21T13:07:38.973 回答
0

The best way, is simply to check the window width, then try to resize the window width in a pixel or two, and then check if the current width equals or not to the one before the resize

in other words, if you succeeded to resize the window, you're probably inside a popup.

good luck.

于 2013-07-01T21:54:53.393 回答
0

这不是一个确定的触发方法,但通常使用的弹出窗口window.open()不会指向新的 URL,因此两个窗口将具有相同的 href。因此,在很多情况下:

window.location.href == window.opener.location.href

对于弹出窗口将是正确的。所以你可以这样做:

var isPopup = (window.location.href == window.opener.location.href);

就像我说的,这在我有限的测试中有效,所以可能会有一些反馈表明这在哪里不可靠。

于 2012-04-20T04:59:16.307 回答
0

对我来说,我正在实现一个注销屏幕,该屏幕可以通过 window.open(..) 或从单个页面中的链接显示在弹出窗口中。

我需要确定:

1)如果我的注销屏幕在弹出窗口中,则:

event.preventDefault();
window.close();

2)否则使用浏览器返回功能..

window.history.back();

我的解决方案:如果页面在弹出窗口中,在我的情况下,它的窗口页面历史记录为 1:

event.preventDefault();
if (window.history.length === 1) {
    window.close();
} else {
    window.history.back();
}
于 2017-04-06T22:26:42.707 回答
0

我在“Typescript/Nodejs”中实现了弹出窗口屏幕的“关闭”按钮和“_self”窗口的“取消”按钮,并相信它也适用于 JavaScript。所以我需要确定屏幕是否在弹出窗口中打开

if(window.opener || window.history.length === 1) 
     isPopupWindow = true;
else 
   isPopupWindow = false;

“window.opener”适用于几乎所有浏览器,但 IE 存在问题,因此为了处理 IE 问题,我使用了“window.history.length”。

于 2019-04-05T08:31:42.713 回答