2015-10-07 10 views
8

Visualizzo un comportamento diverso con le chiamate a window.open() quando si esegue Internet Explorer come amministratore. Non sono in grado di riprodurlo in un ambiente iframe sanbox come jsfiddle/codepen ecc. Ma farò del mio meglio per spiegare il problema qui.Diverso comportamento window.open (...) durante l'esecuzione di Internet Explorer 11 come amministratore

In IE, non è in esecuzione come amministratore, quando premo il pulsante "Empty" effettua una chiamata a window.open ("", windowname, ...) e viene visualizzata una nuova finestra vuota. Successivamente premo il pulsante "Full" e faccio una chiamata a window.open ("http://www.google.com", windowname, ..) e quale era la vecchia finestra vuota viene impostata su Google.

In IE, quando si esegue come amministratore, la finestra vuota iniziale non viene sovrascritta. Invece una nuova finestra con Google appare accanto alla finestra vuota.

Ho incluso il mio codice di prova qui sotto. Non sono sicuro se il fatto che è in un iframe è rilevante ma sto includendo solo nel caso in cui

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

Dove la fonte a http://127.0.0.1:8888/ sembra

<!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

Interessante, lo fa ogni altro browser o solo IE? –

+0

Ho provato Firefox e Chrome e non aprono la seconda scheda. Solo IE11 in esecuzione come amministratore. – carson

+0

IE ha molte ... chiamiamole impostazioni "oscure" (di sicurezza) - la mia ipotesi sarebbe che una di queste potrebbe essere diversa, a seconda che si esegua IE come amministratore o come utente normale. – CBroe

risposta

2

Il comportamento di window.open() dipende da alcune cose, soprattutto in Internet Esploratore.

Poiché si fornisce un parametro larghezza/altezza, il browser dovrebbe aprire la nuova finestra come popup (se le impostazioni sono impostate per consentirlo) - se si rimuove la larghezza/altezza i browser si apriranno spesso in un nuova scheda invece.

Dato che il tuo windowname viene riutilizzato e non contiene spazi o hypens, il browser deve riutilizzare la stessa istanza di finestra per entrambi. (se avessi spazi o trattini, IE soffocherebbe e non aprirà il popup (noto bug di IE)).

"TESTWINDOW" è probabilmente abbastanza unico per questo, ma anche essere consapevoli del fatto che IE ha un bug in cui se si dispone di un altro sito che tenta di chiamare window.open() e utilizzano lo stesso nome di finestra come il tuo sito , il browser riutilizzerà quella finestra popup. IE non "namespace" correttamente in un dominio (bug noto).

Ora a un certo punto (IE7/8?) Microsoft ha cambiato alcuni comportamenti in merito all'avvio di una finestra con posizione "" (stringa vuota) e/o "su: vuoto" o "javascript :;" o "javascript: void;" ecc. tali da non essere considerati attendibili allo stesso livello del dominio che li ha aperti. Potresti riscontrare un problema correlato a questo. (Se usi 2 URL diversi ma "reali", sarei curioso di sapere se il comportamento è migliore).

Poiché la nuova finestra popup è una finestra con nome, se l'iframe o il suo genitore ha un nome di "TESTWINDOW" otterrete anche alcuni risultati strani.

Infine è stato indicato che si ottengono risultati diversi a seconda dell'utente connesso. Poiché le impostazioni in IE sono per utente, è probabile che tu possa vedere diverse impostazioni in azione. per esempio. uno dei tuoi profili ha il tuo dominio (o localhost) nell'elenco delle modalità di compatibilità? o uno dei tuoi profili ha regole di blocco dei popup o impostazioni di privacy diverse?

0

Prova un altro modo, wihout utilizzando window.open()

c'è: Alertify JS una buona libreria per i messaggi.

solo includono le js e file css:

<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" /> 

Ecco un esempio:

alertify.alert("Message"); 

c'è un sacco di modi, come: pronta, confim, log, il successo, ...

Provalo :)

Problemi correlati