2010-11-28 16 views
0

J'ai un script de contenu qui s'exécute sur chaque page. Il met à jour le html de la page, ce qui semble prendre plus de temps sur des pages plus longues (le script parcourt le DOM plusieurs fois). Sur les pages plus longues, le script peut prendre jusqu'à 10-20 secondes pour terminer, et il semble que lorsque le chrome est trop long, le script s'arrête, car sur ces pages, je ne vois qu'une partie de la page modifiée. La partie étrange est que lorsque j'ajoute plusieurs alertes quelque part dans le code, en divisant le temps d'exécution en plusieurs parties, le script fonctionne parfaitement bien et modifie la page entière. Cependant, lorsque l'alerte est supprimée, le script est à nouveau arrêté prématurément et seule une partie de la page est modifiée. Ma seule conclusion est que le chrome arrête les scripts qui durent trop longtemps, donc ma question est - est-ce vrai? Et si oui, que peut-on faire à ce sujet? (en plus d'utiliser des alertes pop-up ennuyeuses)Est-ce qu'un script de contenu d'extension chrome est arrêté si cela prend trop de temps pour terminer?

J'ai une autre théorie, le script s'arrête parce qu'il y a un conflit quand des commandes simultanées essayent de changer le DOM. Est-ce que cela a plus de sens?

Plus de détails sur l'architecture: La page d'arrière-plan reçoit un message du script de contenu. Ce message inclut une fonction de rappel (la fonction qui modifie réellement le code HTML). Cette fonction est appelée plusieurs fois à partir de la page d'arrière-plan, par rapport à la longueur de la page. Si j'insère une alerte dans la fonction de rappel, chaque appel est exécuté sans problème. Si toutefois je le supprime, seul le premier appel de la page d'arrière-plan est effectué, et d'autres appels ne font rien (bien que le code de la page d'arrière-plan continue à fonctionner).

Répondre

0

J'ai trouvé quel était le problème. J'utilisais le rappel donné par le message du script de contenu à la page HTML de fond. Ce rappel ne peut être exécuté qu'une seule fois, car une seule réponse est autorisée pour chaque message envoyé à la page d'arrière-plan.

Une sorte de bogue dans le chrome provoque de nombreuses réponses à travailler lorsque j'ai ajouté une alerte à l'intérieur de la fonction de rappel.

Le problème a été résolu en décomposant le contenu du message en plusieurs messages.

0

Oui, et généralement il invite l'utilisateur s'il veut continuer à attendre ou à tuer la page.

+0

ouais je connais ces invites, elles ne s'affichent pas. il semble juste le tuer sans préavis. aucune idée pourquoi/comment l'empêcher de se produire? – Uri

+0

btw il tue le script pas la page entière. – Uri

0

Chrome a certaines limites en place si le JavaScript prend beaucoup de temps (donc bloque le thread principal), il vous informera de prendre trop de temps.

Vous avez deux options:

  1. Pouvez-vous délester un traitement à un travailleur HTML5 et poster un message à la page lors du traitement est terminée?
  2. Pouvez-vous transférer un traitement à la page d'arrière-plan et renvoyer une demande de message au script de contenu lorsque le traitement est terminé?
+0

Je ne peux pas déplacer le traitement à la page d'arrière-plan, car cela signifie renvoyer l'intégralité du html de la page ... J'ai ajouté plus de détails, peut-être que j'utilise mal le rappel en quelque sorte ... – Uri