2

Ich erinnere mich nicht an das letzte Mal, dass ich für alles verwenden Pop-up im Internet Explorer für geöffnet Popup arbeiten, aber :(auf (‚load‘) nicht 11

ich neue Fenster geöffnet werden soll und wenn es geöffnet wird ich will „1“ rufen. Fenster in allen Browsern öffnen, aber in IE 11/Rand macht es nicht alert().

<html> 
<head> 
<script src="//code.jquery.com/jquery-3.1.1.min.js"></script> 
<script> 
$(document).ready(function(){ 
    $('#button').on('click',function(e){ 
    e.preventDefault(); 
    var win = window.open ('/test.html') 
    $(win).on('load',function(){ 
     alert ('opened'); 
    }); 
    }); 
}); 
</script> 
</head> 
<body> 
<a href="#" id="button">button</a> 
</body> 
</html> 

Antwort

2

Die auftritt, weil IE11 (und vermutlich Rand) aus offenem Fenster Anruf wird nicht zurückkehren, bis das Fenster Laden beendet ist geöffnet. Der von Ihnen hinzugefügte LOAD-Ereignishandler wird nicht aufgerufen, da das Ereignis bereits ausgelöst wurde.

Nach file: Protokolldateien aufgefordert, um die Erlaubnis, blockierten Inhalt und abstürzenden IE zu erlauben, Tests fortgesetzt mit einem localhost node.js/Express-Server. Das Ergebnis wurde verifiziert, indem ein load-Ereignis-Listener in test.html gesetzt wurde, der Code enthielt, um "test loaded <br>" an den Inhalt eines DIV-Elements anzuhängen und Code in den Click-Handler einzufügen, um "opened window" anzuhängen <br> "an das gleiche DIV, in der Seite geöffnet, unmittelbar nach dem Fenster öffnen Anruf.

IE gemeldet "Test geladen, Fenster geöffnet" in dieser Reihenfolge. Firefox hat auf der Startseite einen Fehler ausgegeben, dass das DIV-Element, mit dem sich die geöffnete Seite anmeldet, noch nicht existiert (wie erwartet).

Es ist schwierig, eine Codierungslösung vorzuschlagen, ohne zu wissen, was durch den Interfensterzugriff erreicht werden muss und welche Dateien Sie steuern und ändern können. Zu wissen, was das Problem ist, sollte helfen!

1

den Raum nach window.open herausnehmen und vor der Klammer, so dass Sie nicht stolpern up the JS engine.Sie könnten mit win wickeln eine Kopie der window.open Funktion, nicht das neue Fenster selbst.

Während es eine stilistische Wahl, ob oder nicht, einen Raum zu setzen, bevor die Klammer, die eine Funktion der Argumentliste wie in definieren:

// Either of these will work 
function foo (a, b, c) { ... 
function foo(a, b, c) { ... 

Es soll nie ein Leerzeichen nach einem Methodennamen und vor der Klammer sein diese Gruppe, die Methode Argumente:

obj.foo(x); // Correct 
obj.foo (x); // Incorrect 

HINWEIS: Dieser Code wird in dem Stack-Überlauf-Code-snippet Bereich durch Sand Boxen hier nicht ausführen.

$(document).ready(function(){ 
 
    
 
    // Set the "button" to have a click callback 
 
    $('#button').on('click',function(e){ 
 

 
     // Cancel the native click event of the hyperlink 
 
     e.preventDefault(); 
 

 
     // Open a new window and get a handle to it 
 
     var win = window.open('/test.html'); // <-- No space after "open" 
 

 
     // Set the new window to have a load event handler 
 
     $(win).on("load", function(e){ 
 
     
 
     // Alert the user 
 
     alert("Yay!"); 
 
     }); 
 

 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<a href="#" id="button">button</a>

+0

Danke für den Zeiger über Klammern. IDE mit Autoformatierung verwöhnt mich. Deine Antwort hilft nicht bei der Frage hart. – Sasha

+1

@ScottMarcus Haben Sie eine Referenz für "Es sollte nie ein Leerzeichen nach einem Methodennamen und vor der Klammer ..." angezeigt werden, die angibt, dass dies die JavaScript-Engine beeinträchtigen könnte? Ich bin mir nicht bewusst, dass dies der Fall ist. – traktor53