Wie um zu verhindern, "Stoppen Sie dieses Skript ausführen" im Browser?
Habe ich eine ASP.NET MVC-Seite mit JQuery Editierbare Datentabelle, die hat 14 Spalten.
Ich habe eine Schaltfläche (Übernehmen Keine Erkenntnisse)zu tun Client-Seite calcultions snd gelten für alle Zeilen in dieser Tabelle.
Wenn wir auf diesen button klicken, nach der Anwendung der Berechnungen für alle 4 Zeilen, es ist die Darstellung dieser "Stop-Skript Ausführen" Angezeigt.
Ich überprüft die Einstellungen. In den Internet-Optionen, Registerkarte "Erweitert", "Disable Script debugging(Internet Explorer)" - option Aktiviert ist. Und "Display eine Benachrichtigung über eine Skript-Fehlermeldung" nicht aktiviert ist.
Ich bin mit dem Internet Explorer 8. Ich es Nun nicht passieren, auf IE9. Aber dies ist der server, wir können kein upgrade auf IE9.
Ich habe die Forschung und versucht, diese zwei Optionen und nichts hat funktioniert.
Beispiel(1):
http://www.codeproject.com/Tips/406739/Preventing-Stop-running-this-script-in-Browsers
Beispiel(2):
http://www.picnet.com.au/blogs/guido/post/2010/03/04/how-to-prevent-stop-running-this-script-message-in-browsers/
Jemand hatte das isse und Anregungen sind sehr geschätzt.
Dies ist der eigentliche code, der ist, werfen Sie das Skript Meldung:
for(i < iTotalRecords;i++)
{
var row = oTableAuditLines.fnGetData(i);
oTableAuditLines.fnUpdate("NF",i,1);
UndoHCPCS(row,i);
UndoHCPCSModCodes(row,i);
UndoLineUnitCount(row,i);
oTableAuditLines.fnUpdate("", i, 6); //Reset Denial Reason Code
UndoNonCoveredCharges(row,i);
CalculateAmountPaidAtLine(row,i);
CalculateEstimatedRecoveryAmountAtLine(row,i);
}
UpdateSummaryLine();
UpdateSummaryLineReasonCode();
Durch Bezugnahme-Beispiel-code in Beispiel(2), änderte ich den code wie unten, und ich bin noch immer die Script-Meldung:
//Diese Funktion ist zu vermeiden, Script Läuft Nachricht
RepeatingOperation = function(op, yieldEveryIteration)
{
var count = 0;
var instance = this;
this.step = function(args)
{
if (++count >= yieldEveryIteration)
{
count = 0;
setTimeout(function() { op(args); }, 1, [])
return;
}
op(args);
};
};
function ApplyNoFindings()
{
var i = 0;
var ro = new RepeatingOperation(function()
{
var row = oTableAuditLines.fnGetData(i);
oTableAuditLines.fnUpdate("NF",i,1);
UndoHCPCS(row,i);
UndoHCPCSModCodes(row,i);
UndoLineUnitCount(row,i);
oTableAuditLines.fnUpdate("", i, 6); //Reset Denial Reason Code
UndoNonCoveredCharges(row,i);
CalculateAmountPaidAtLine(row,i);
CalculateEstimatedRecoveryAmountAtLine(row,i);
if (++i < iTotalRecords)
{
ro.step();
}
else
{
UpdateSummaryLine();
UpdateSummaryLineReasonCode();
}
}, 100);
ro.step();
}
Was mache ich hier falsch?
- Sie sollten nicht betrachten, nicht die Anzeige der slow-code Warnmeldung, die Sie suchen sollten bei der Optimierung Ihres Codes.
"What am i doing wrong here?"
... Du bist mit ASP.Net, duh!? Nein, aber im ernst, Rory ist richtig. Sie Daten Tabelle code ist bereits tun, zu viel. Eine der wichtigsten Befugnisse des ASP MVC ist die Fähigkeit zu lassen, den server über C# oder auch XAML-Griff "Berechnungen" und schreiben von HTML werden in der Ansicht. Haben Sie jemals getan, das Radio walkthrough? Es gibt Ihnen eine gute Idee wie man mit mehr von diesem server-Seite und senden nichts, aber gerade HTML zu deiner "Tabelle" erzeugen damit weniger Verwirrung client-Seite und verursacht weniger chance für die client-Seite Fehler.- Ich fügte hinzu, javascript-tag aktualisiert und die Titel werden mehr relevanten. Hoffe, du bist ok mit diesem.
- Siehe auch Deaktivieren der lange-laufen-Skript wird in Internet Explorer
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist javascript ist single-threaded, so dass, wenn es eine Funktion gibt, die dauert zu lange, um abzuschließen, diese Funktion kann bewirken, dass das UI nicht mehr reagiert. Daher wird der browser warnen den Benutzer über das lange script läuft durch die Anzeige der folgenden Meldung: "Stoppen Sie dieses Skript ausführen". Die Lösungen für dieses problem sind:
setTimeout
zu brechen, die die Ausführung der Funktion in viele Stücke, die sind kurz genug.Beispiel-code-Muster:
Die Lösung, die Sie nehmen in Ihrem Beispiel(2) ist richtig, aber es gibt ein problem in deinem code. Das ist die setTimeout läuft nicht. Ändern Sie Ihren code wie folgt:
Ändern Sie Ihre
function ApplyNoFindings()
, versuchen Sie dies:statt:
Hinweis: nicht getestet, nur Ihnen eine Idee geben, wie es funktionieren sollte
Trotz einer anderen Antwort schon akzeptiert, ich möchte hier Allgemeine Informationen für Entwickler, die haben dieses problem in feature:
Durch diesen link finden Sie Informationen, wie Sie dieses Problem beheben Nutzers Seite http://support.microsoft.com/kb/175500 - Benutzer können fügen Sie einen Registrierungsschlüssel.
Außerdem finden Sie dort Informationen darüber, Wann dieses "langsam Läuft" Meldung wird angezeigt:
Wie Sie sehen, Langsamkeit gemessen in javascript-Anweisungen nicht in der Zeit.
Können Sie auch prüfen, HTML 5 Arbeiter
Ein web worker ist ein JavaScript im hintergrund laufen, ohne dass die performance der Seite.
Beim ausführen von Skripts in eine HTML-Seite, die Seite wird nicht mehr reagiert, bis das Skript abgeschlossen ist.
Ein web worker ist ein JavaScript, das läuft im hintergrund, unabhängig von anderen Skripten, ohne Auswirkungen auf die performance der Seite.
Erstellen eines neuen Arbeitnehmers ist einfach. Alles, was Sie tun müssen ist, rufen Sie die Arbeiter() Konstruktor, der die Angabe des URI von einem Skript ausgeführt werden, in der worker-thread gesetzt, der Arbeiter ist Arbeiter.onmessage-Eigenschaft auf eine entsprechende event-handler-Funktion.
Alternativ können Sie die Methode addEventListener() :
Sehen Sie mehr details unter:
https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers