2016-07-12 5 views
1

Ich behalte eine große Anwendung. In einigen Bereichen muss ich prüfen, ob das aktuelle Fenster ein Popup ist (geöffnet mit window.open()) oder ein neues Fenster (ein neues Tab oder Fenster, das mit target = "_ blank" geöffnet wurde). HierGibt es eine Möglichkeit zu bestimmen, ob das Browserfenster ein Popup ist oder nur ein neues Fenster mit target = "_ blank"?

ist ein Beispiel für mein Problem:

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(); 
     } 
    } 
+0

Schauen Sie sich diese [Überprüfen Sie, ob ein Popup-Fenster ist oder nicht?] (Http://stackoverflow.com/questions/10240398/check-whether-a- window-is-popup-or-not) –

+0

@ZuraSekhniashvili Ich tat, aber wenn ich das richtig verstehe, können wir bestimmen, ob das Fenster "'in einem Popup-Fenster oder Ziel = _blank Fenster'" wenn das Fenster ist .opener ist nicht null. Aber wie überprüfe ich, ob ich mich gerade in einem Popup-Fenster befinde oder nur in einem Ziel = _blank? –

+0

@VinShahrdar Wird das neue 'Fenster' von Ihrer Anwendung geöffnet? – guest271314

Antwort

1

können Sie nur eine globale Variable gesetzt, wenn Sie das Popup zu öffnen, und dann wissen Sie, es ist ein Pop-up ist, wenn die Variablen ein truthy Wert ist - wenn es undefined ist es wird false sein:

In der anrufenden Seite:

var popupWindow = window.open(page); 
popupWindow.isPopup = true; 

Im neuen Fenster:

if (window.isPopup) { 
    window.close(); 
} 

Update:

Sie alternativ den Namen des window einstellen könnte, wenn Sie mit einem Popup öffnen. Die Funktion window.open übernimmt einen zweiten Parameter für den Namen, gefolgt von optionalen Fensterfunktionen.

In der anrufenden Seite:

window.open("test.html", "Test Popup"); 

Im neuen Fenster:

if (window.name.length) { 
    window.close(); 
} 
+0

Das Problem ist, dass möglicherweise Hunderte von Fenstern im gesamten System geöffnet sind. Ich habe mich gefragt, ob es einen Weg gibt, dies mit minimalem Aufwand zu bewältigen. Würde die Suche nach window.name funktionieren? Ich könnte falsch liegen, aber window.name wird nur gesetzt, wenn wir ein neues Popup öffnen. –

+0

@VinShahrdar Ja, das sollte auch funktionieren. Siehe aktualisierte Antwort. –

0

Sie Fahne Fenster geben kann, wenn Sie es öffnen.

//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 
} 
0

Sie können die name des neuen window gesetzt durch den zweiten Parameter auf window.open() Bereitstellung, z .;

var w = window.open("url", "__blank__") 

bei geöffnetem window,

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