2015-10-07 2 views
8

Ich sehe ein anderes Verhalten mit Aufrufen von window.open() beim Ausführen von Internet Explorer als Administrator. Ich bin nicht in der Lage, es in einer sanboxed iframe-Umgebung wie jsfiddle/codepen usw. zu reproduzieren, aber ich werde mein Bestes tun, um das Problem hier zu erklären.Verschiedene window.open (...) Verhalten beim Ausführen von Internet Explorer 11 als Administrator

In IE, nicht als Administrator ausgeführt, wenn ich die Schaltfläche "Empty" drücken ruft es window.open ("", windowname, ...) und ein neues leeres Fenster erscheint. Als nächstes drücke ich den Knopf "Full" und es wird ein Aufruf von window.open ("http://www.google.com", windowname, ..) gemacht und das alte leere Fenster wird auf Google gesetzt.

In IE wird das anfängliche leere Fenster bei der Ausführung als Administrator nicht überschrieben. Stattdessen erscheint neben dem leeren Fenster ein neues Fenster mit Google.

Ich habe meinen Testcode unten eingefügt. Ich bin mir nicht sicher, ob die Tatsache, dass es in einem Iframe ist relevant ist, aber ich bin auch es nur für den Fall

<!DOCTYPE html> 
<html> 
    <head> 
    </head> 
    <body> 
    <iframe src="http://127.0.0.1:8888/"> 
    </iframe> 
    </body> 
</html> 

Wo die Quelle bei http://127.0.0.1:8888/ wie

<!DOCTYPE html> 
<html> 
<head> 
    <script type="text/javascript"> 
    var windowname = "TESTWINDOW"; 
    var features = "menubar=no, location=no, resizable=yes, status=yes, width=500, height=500"; 

    function doEmpty(e) { 
     window.open("", windowname, features); 
    } 

    function doFull(e) { 
     window.open("http://www.google.com", windowname, features); 
    } 
    </script> 

    <style> 
    body { 
     width: 1000px; 
     height: 1000px; 
    } 
    </style> 
</head> 

<body> 
    <button onclick="doEmpty()">Empty</button> 
    <button onclick="doFull()">Full</button> 
</body> 

</html> 
+0

Interessant, macht das jeder andere Browser, oder nur IE? –

+0

Versuchte Firefox und Chrome und sie öffnen nicht die zweite Registerkarte. Nur IE11 läuft als Administrator. – carson

+0

IE hat eine Menge von ... nennen wir sie "obskuren" (Sicherheit) Einstellungen - meine Vermutung wäre, dass eine davon unterschiedlich sein könnte, abhängig davon, ob Sie IE als Admin oder einen normalen Benutzer ausführen. – CBroe

Antwort

2

Das Verhalten von window.open() auf ein paar Dinge hängt, vor allem im Internet Forscher.

Da Sie einen Breiten-/Höhenparameter bereitstellen, sollte der Browser Ihr neues Fenster als Popup öffnen (wenn Sie die Einstellungen so eingestellt haben, dass dies zulässig ist) - wenn Sie die Breite/Höhe entfernen, werden Browser häufig in einem geöffnet neue Registerkarte stattdessen.

Da Ihr windowname wiederverwendet wird und keine Leerzeichen oder Hyphen enthält, sollte der Browser dieselbe Fensterinstanz für beide wiederverwenden. (Wenn du Leerzeichen oder Bindestriche hattest, würde der IE ersticken und das Popup nicht öffnen (bekannter IE-Fehler)).

"TESTWINDOW" ist wahrscheinlich einzigartig genug, aber auch, dass IE einen Fehler hat, wenn Sie eine andere Website haben, die versucht, window.open() aufzurufen und sie verwenden den gleichen Fensternamen wie Sie/Ihre Website , wird der Browser dieses Popup-Fenster wiederverwenden. IE "namespace" sie nicht ordnungsgemäß zu einer Domäne (bekannter Fehler).

Jetzt an einem Punkt (IE7/8?) Microsoft änderte einige Verhaltensweisen rund um das Starten eines Fensters mit einer Position von "" (leere Zeichenfolge) und/oder "about: blank" oder "javascript :;" oder "javascript: void;" usw., so dass sie nicht auf dem gleichen Level vertraut wurden wie die Domain, die sie geöffnet hat. Möglicherweise ist ein Problem damit verbunden. (Wenn Sie zwei verschiedene, aber "echte" URLs verwenden, wäre ich neugierig, ob das Verhalten besser ist).

Da das neue Popup-Fenster ein benanntes Fenster ist, erhalten Sie, wenn der Iframe oder sein Elternteil den Namen "TESTWINDOW" hat, auch seltsame Ergebnisse.

Schließlich haben Sie angegeben, dass Sie abhängig vom angemeldeten Benutzer unterschiedliche Ergebnisse erhalten. Da die Einstellungen in IE pro Benutzer sind, sehen Sie sehr wahrscheinlich unterschiedliche Einstellungen in Aktion. z.B. Hat eines Ihrer Profile Ihre Domain (oder localhost) in der Kompatibilitätsmodus-Liste? Oder hat eines Ihrer Profile unterschiedliche Popup-Blockierungsregeln oder Datenschutzeinstellungen?

0

Versuchen Sie eine andere Art und Weise sieht, wihout mit window.open()

gibt es: Alertify JS eine gute Bibliothek für Nachrichten.

sind nur die js und CSS-Dateien:

<script src="PATH_TO_FILE/alertify.min.js"></script> 
<link rel="stylesheet" href="PATH_TO_FILE/alertify.css" /> 
<link rel="stylesheet" href="PATH_TO_FILE/alertify.default.css" /> 

hier ein Beispiel:

alertify.alert("Message"); 

gibt es eine Menge Möglichkeiten, wie: prompt, confim, sich einzuloggen, Erfolg, ...

Try it :)

Verwandte Themen