2010-11-28 6 views
0

Ich habe ein Inhaltsskript auf jeder Seite ausgeführt. Es aktualisiert das HTML der Seite, was auf längeren Seiten mehr Zeit in Anspruch nimmt (das Skript führt das DOM oft durch). Auf längeren Seiten kann das Skript bis zu 10-20 Sekunden dauern, und wenn es zu lange dauert, stoppt Chrome das Skript, weil auf diesen Seiten nur ein Teil der Seite geändert wird.wird ein Content-Skript für eine Chrome-Erweiterung gestoppt, wenn es zu lange dauert, es zu beenden?

Der seltsame Teil ist, dass, wenn ich mehrere Warnungen irgendwo im Code hinzufügen, die Laufzeit in mehrere Teile unterteilt, läuft das Skript völlig in Ordnung und ändert die gesamte Seite. Wenn die Warnung jedoch entfernt wird, wird das Skript erneut vorzeitig beendet und nur ein Teil der Seite wird geändert.

Meine einzige Schlussfolgerung ist, dass Chrome Skripte stoppt, die zu lange laufen, so ist meine Frage - ist das wahr? Und wenn ja - was kann dagegen getan werden? (neben der Verwendung von lästigen Pop-up-Warnungen)

Ich habe eine andere Theorie, das Skript stoppt, weil es irgendwie einen Konflikt gibt, wenn gleichzeitige Befehle versuchen, das DOM zu ändern. Macht das mehr Sinn?

Weitere Details zur Architektur: Die Hintergrundseite erhält eine Nachricht vom Inhaltsskript. Diese Nachricht enthält eine Rückruffunktion (die Funktion, die den HTML-Code tatsächlich ändert). Diese Funktion wird dann relativ zur Seitenlänge mehrmals von der Hintergrundseite aufgerufen. Wenn ich eine Warnung in die Callback-Funktion einfüge, wird jeder Aufruf ohne Probleme ausgeführt. Wenn ich es jedoch entferne, wird nur der erste Aufruf von der Hintergrundseite gemacht, und weitere Aufrufe machen nichts (obwohl der Hintergrundseitencode weiter läuft).

Antwort

0

Ich fand heraus, was das Problem war. Ich habe den Rückruf verwendet, der durch die Nachricht vom Inhaltsskript zur Hintergrund-HTML-Seite gegeben wurde. Dieser Rückruf kann nur einmal ausgeführt werden, da für jede Nachricht, die an die Hintergrundseite gesendet wird, nur eine Antwort zulässig ist.

Eine Art von Fehler in Chrome bewirkt, dass viele Antworten funktionieren, wenn ich eine Warnung innerhalb der Callback-Funktion hinzugefügt habe.

Das Problem wurde gelöst, indem der Inhalt der Nachricht in mehrere Nachrichten aufgeteilt wurde.

0

Ja, und normalerweise wird der Benutzer gefragt, ob er weiter warten oder die Seite beenden möchte.

+0

ja ich kenne diese Aufforderungen, sie zeigen aber nicht. es scheint einfach ohne vorherige Ankündigung zu töten. eine Idee warum/wie kann man verhindern, dass es passiert? – Uri

+0

btw es tötet das Skript nicht die ganze Seite. – Uri

0

Chrome hat einige Einschränkungen, wenn das JavaScript lange braucht (daher blockiert es den Hauptthread), es wird Sie darüber informieren, dass es zu viel Zeit in Anspruch nimmt.

Sie haben zwei Möglichkeiten:

  1. Können Sie einige Verarbeitung zu einem HTML5 Arbeiter auslagern und eine Nachricht schreiben zurück auf die Seite, wenn die Verarbeitung abgeschlossen ist?
  2. Können Sie eine Verarbeitung auf die Hintergrundseite verschieben und eine Nachrichtenanforderung zurück an das Inhaltsskript senden, wenn die Verarbeitung abgeschlossen ist?
+0

Ich kann die Verarbeitung nicht auf die Hintergrundseite verschieben, da dies bedeutet, dass ich den gesamten HTML-Code der Seite hin- und herschicken muss ... Ich habe weitere Details hinzugefügt, vielleicht missbrauche ich den Callback irgendwie ... – Uri