Javascript 是否有办法使用target=";确定浏览器窗口是一个弹出窗口,还是一个新窗口_空白“;?
我正在维护一个大型应用程序。在某些区域,我必须检查当前窗口是一个弹出窗口(使用window.open()打开)还是一个新窗口(使用target=“\u blank”)打开的新选项卡或窗口) 下面是我的问题的一个例子: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) {
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是的,那也应该可以。请参阅更新的答案。