2010-03-23 10 views
8

Wir verwenden window.location.href, um den Benutzer zu einer Seite zu navigieren. Außerdem haben wir das window.onbeforeunload-Ereignis so konfiguriert, dass Benutzer gewarnt werden, falls noch nicht gespeicherte Änderungen vorliegen.window.onbeforeunload und window.location.href in IE

window.onbeforeunload = confirmBeforeClose; 

function confirmBeforeClose() { 
    if (jwd.global.inEditMode) 
     return "Your changes will not be saved :) and you will be punished to death"; 
} 

In Orten, wo es nicht gespeicherte Änderungen sind, und ich versuche window.location.href zu verwenden, um den Benutzer zu navigieren, erhalte ich die Warnmeldung.

Es funktioniert gut, wenn ich im Popup auf OK klicke. Wenn ich jedoch auf ABBRECHEN klicken, löst die JS einen unspezifizierten Fehler bei window.location.href aus.

Jede Hilfe wird geschätzt.

+0

zeigen Sie den Code in dem Sie die 'location.href' tun. –

+0

Ich kann das nur in IE7 reproduzieren. Ich habe bestätigt, dass FF 3.6, Chrome 4 und IE8 keinen Fehler auslösen (IE6 wurde nicht getestet). Bitte fügen Sie IE7 als Teil der Frage oder des Titels hinzu. – Nick

Antwort

11

Ich war auch dieses Problem (in IE7 und höher, nicht in IE6 jedoch).

Die einzige Lösung, die ich finden konnte, war das Wrapping des Aufrufs window.location.href in einem try/catch-Block.

Das folgende ist ein vollständiges Beispiel, das das Problem reproduziert. Wenn Sie das try/catch auskommentieren, funktioniert es in allen Browsern wie gewünscht.

JavaScript (in HTML-Kopf):

window.onbeforeunload = confirmBeforeClose; 

    function confirmBeforeClose() 
    { 
    return 'You have made changes on this page that will be lost if you navigate away without saving.'; 
    } 

    function leavePage() 
    { 
    // try { 
      window.location.href = "http://www.example.com"; 
    // } catch(e) { } 
    } 

HTML:

 
<body> 
<a href="#" onclick="leavePage(); return false;">Leave this page</a> 
</body> 
+2

Für zukünftige Besucher: Das hat es jetzt auch für mich auf IE9 jetzt behoben, also ist es eindeutig nicht nur IE7. –

+1

... und auch für IE11! – nitram

+0

.......... Und Edge –

Verwandte Themen