2008-11-17 6 views
8

Ich entwickle eine Website, die umfangreiche Verwendung von JavaScript (jQuery) macht. Ich bekomme regelmäßig den IE "Hör auf, dieses Skript auszuführen?" Fehlerdialog wenn ich versuche den Browser zu schließen."Hören Sie auf, dieses Skript auszuführen?" Fehler

Ich vermute, das Problem tritt auf, weil die Website eine einzelne Seite ist, die AJAX verwendet, so dass es keine Postbacks gibt, um IE die Anzahl der ausgeführten Befehle zurückzusetzen.

Clientseitige Registrierungshacking ist keine Option.

Kennt jemand einen Weg, um diesen Fehler zu umgehen?

UPDATE: Die Seite hat eine Anzahl (~ 10) Intervall-Timer, die kontinuierlich in Intervallen von 30 oder 60 Sekunden abfragen.

+0

Vielleicht möchten Sie sich die Antworten ansehen, die für die Frage gepostet wurden "[ein Skript auf dieser Seite verursacht z. B. langsam zu laufen] (http://stackoverflow.com/questions/212550/a-script-on-this- page-is-causing-ie-to-run-langsam "). –

Antwort

3

Verwenden Sie zufällig einen window.onunload-Handler? Wenn Sie dies tun, können Sie überprüfen, ob Sie dort eine Endlosschleife haben.

Um zu überprüfen, an der Unterseite des Javascript tun:

window.onunload = null; 

und erneut testen.

+0

dies ist nicht das Problem in meinem Fall. Ich habe einfach ein langes Skript auf einer Seite ausgeführt. – liammclennan

+0

@liammclennan Sie hatten also ein Skript, das nur immer (oder fast immer) ausgeführt wurde, aber nur beim Schließen der Registerkarte wurde eine Warnung angezeigt? –

1

Sie haben nur einige lange laufende Skript/Endlosschleife in Ihrem Code. Weitere Details könnten eine genauere Antwort erhalten.

Wenn Ihre Seite viele Intervalle verwendet, sollten Sie sie vor dem Navigieren von der Seite abbrechen. Verwenden Sie window.onunload, um alle Intervalle zu löschen.

4

Ich habe auch dieses Problem konfrontiert und hatte dieses Problem durch Teilung der kontinuierlichen DOM-Executionio überwunden. Für diesen Ansatz verwendete ich setTimeout Funktion. Die Lösung dieses Problems hängt vollständig davon ab, wie Sie die fortlaufende Ausführung teilen.

+0

setTimeout ist der Weg zu gehen! Getestet in IE8 und mit großen AJAX-Datensätzen über 5.000 Elemente. –

1

Ich nur blogged about this und stelle, was ich denke, ist eine ziemlich stilvolle Lösung. Also schau es dir an. Wie oben erwähnt, bricht meine Lösung nur lang andauernde Operationen in Blöcke auf, aber ich biete eine nette Hilfsklasse, um dies zu tun.

+0

Ihre Lösung ist interessant. Ich habe es nicht versucht, aber wenn es funktioniert, dann ist es enorm nützlich. – liammclennan

0

können sich auch für den Langzeitbetrieb in $ (document) .ready() und $ (Fenster) .load geteilt()

0

Ich hatte gerade ein Problem mit Jquery Selektoren, die zu allgemein waren: z $("*")

2

Problem: „Hör auf dieses Skript ausgeführt wird?“ Fehler

Lösung: Sie dieses Problem eine Kompatibilität sagen kann, oder einen Bug als das gleiche Material ohne Fehler in Mozilla läuft, aber es läuft in IE 6,7 oder 8 mit einer Fehlermeldung "Stop running this script". Microsoft hat einen Patch zur Verfügung gestellt, um dieses Problem in IE zu beheben. Also, gehen Sie bitte auf den folgenden Link und laden Sie den „Microsoft Fix It“ und die gleiche installieren und den Browser neu starten und Sie werden nie die „Stop läuft dieses Script“ Fehler anzeigen: http://support.microsoft.com/kb/175500#FixItForMeAlways

+5

Das ist nicht wirklich eine Lösung. Benutzer sollten keinen Patch installieren müssen, nur um eine bestimmte Website in ihrem Browser anzuzeigen. Ein paar 'setTimeout'-Aufrufe reichen aus, um dieses Problem zu beheben. Benutzer sollten keine Patches installieren müssen, um den Code von Webentwicklern zu korrigieren (nichts für Webentwickler). –

0

Wie die Person, die $ erwähnt ("*"), versuchen Sie nicht, $ (this) als Bindungsselektor für benutzerdefinierte Ereignisse zu verwenden, dies verursachte ein neues Skript von mir, um die Ladezeiten des Systems zu zerstören.

Verwandte Themen