Javascript 是否有办法使用target=";确定浏览器窗口是一个弹出窗口,还是一个新窗口_空白“;?

Javascript 是否有办法使用target=";确定浏览器窗口是一个弹出窗口,还是一个新窗口_空白“;?,javascript,jquery,google-chrome,popup,Javascript,Jquery,Google Chrome,Popup,我正在维护一个大型应用程序。在某些区域,我必须检查当前窗口是一个弹出窗口(使用window.open()打开)还是一个新窗口(使用target=“\u blank”)打开的新选项卡或窗口) 下面是我的问题的一个例子: function CancelOutOfPage(cancelPath) { if (cancelPath != null && cancelPath != "" && window.opener == null) {

我正在维护一个大型应用程序。在某些区域,我必须检查当前窗口是一个弹出窗口(使用window.open()打开)还是一个新窗口(使用target=“\u blank”)打开的新选项卡或窗口)

下面是我的问题的一个例子:

    function CancelOutOfPage(cancelPath) {
        if (cancelPath != null && cancelPath != "" && window.opener == null) {
            location.href = cancelPath;
        } else if (referrerUrl != "" && window.opener == null) {
            // Just go back
            location.href = referrerUrl;
        } else {
            // It is a popup, close it.
            // MY PROBLEM IS HERE. IF THE WINDOW IS NOT A POPUP, BUT A AN OPENED PAGE
            // THE WHOLE WINDOW WILL CLOSE
            window.close();
        }
    }

您可以在打开弹出窗口时设置一个全局变量,然后如果变量是真实值,您就知道它是一个弹出窗口-如果它是
未定义的
,它将是
false

在呼叫页面中:

var popupWindow = window.open(page);
popupWindow.isPopup = true;
if (window.isPopup) { 
    window.close();
}
window.open("test.html", "Test Popup");
if (window.name.length) { 
    window.close();
}
在新窗口中:

var popupWindow = window.open(page);
popupWindow.isPopup = true;
if (window.isPopup) { 
    window.close();
}
window.open("test.html", "Test Popup");
if (window.name.length) { 
    window.close();
}
更新: 您也可以在使用弹出窗口打开时设置
窗口的名称。该函数使用第二个参数作为名称,后跟可选的窗口功能

在呼叫页面中:

var popupWindow = window.open(page);
popupWindow.isPopup = true;
if (window.isPopup) { 
    window.close();
}
window.open("test.html", "Test Popup");
if (window.name.length) { 
    window.close();
}
在新窗口中:

var popupWindow = window.open(page);
popupWindow.isPopup = true;
if (window.isPopup) { 
    window.close();
}
window.open("test.html", "Test Popup");
if (window.name.length) { 
    window.close();
}

当你们打开窗户时,你们可以在窗户上打上旗子

//in window from which you open new window
var w = window.open('');
w.someFlag = true;

//in opened window
console.log(window.someFlag);
if (window.someFlag){
    //do what you want
}

您可以通过向
窗口提供第二个参数来设置新
窗口的
名称
。open()
,例如

 var w = window.open("url", "__blank__")
在打开的
窗口中

 if (this.name === "__blank__") {/*do stuff*/} else {/*do other stuff*/}

检查一下我做的@ZuraSekhniashvili,但是如果我理解正确,如果window.opener不为null,我们可以确定窗口是否“在弹出窗口内或target=_blankwindow”。但是我如何检查我是在弹出窗口中,还是在目标=_blank中?@VinShahrdar是从应用程序打开的新的
窗口吗?@guest271314是的,来自许多不同的来源。问题是整个系统中可能有数百个窗口打开。我想知道是否有一种方法可以用最少的努力来处理这个问题。检查window.name是否有效?我可能错了,但是window.name只有在我们打开一个新的弹出窗口时才被设置。@VinShahrdar是的,那也应该可以。请参阅更新的答案。