останавливается ли скрипт содержимого расширения Chrome, если он занимает слишком много времени? - PullRequest
0 голосов
/ 28 ноября 2010

У меня есть скрипт контента, работающий на каждой странице.Он обновляет HTML страницы, который, кажется, занимает больше времени на более длинных страницах (сценарий часто обходит DOM).На более длинных страницах выполнение сценария может занять до 10-20 секунд, и кажется, что, если это занимает слишком много времени, Chrome останавливает выполнение сценария, потому что на этих страницах я вижу, что изменилась только часть страницы.Странная часть заключается в том, что когда я добавляю несколько предупреждений где-то в коде, разделяя среду выполнения на несколько частей, сценарий прекрасно работает и изменяет всю страницу.Однако, когда предупреждение удалено, сценарий снова останавливается преждевременно, и изменяется только часть страницы.

Мой единственный вывод - Chrome останавливает сценарии, которые выполняются слишком долго, поэтому мой вопрос -правда?И если так - что с этим можно сделать?(кроме использования надоедливых всплывающих предупреждений)

У меня есть другая теория, сценарий останавливается, потому что каким-то образом возникает конфликт, когда одновременные команды пытаются изменить DOM.Это имеет больше смысла?

Подробнее об архитектуре: Фоновая страница получает сообщение из скрипта контента.Это сообщение включает в себя функцию обратного вызова (функция, которая фактически изменяет HTML).Затем эта функция вызывается с фоновой страницы несколько раз в зависимости от длины страницы.Если я вставляю предупреждение в функцию обратного вызова, каждый вызов выполняется без проблем.Однако, если я удаляю его, выполняется только первый вызов с фоновой страницы, и дальнейшие вызовы ничего не делают (хотя код фоновой страницы продолжает выполняться).

Ответы [ 3 ]

0 голосов
/ 28 ноября 2010

Chrome имеет некоторые ограничения, если JavaScript занимает много времени (следовательно, блокирует основной поток), он уведомит вас о том, что он занимает слишком много времени.

У вас есть два варианта:

  1. Можете ли вы переложить часть обработки на работника HTML5 и отправить сообщение обратно на страницу после завершения обработки?
  2. Можете ли вы переложить часть обработки на фоновую страницу и отправить запрос сообщения обратно в скрипт содержимогокогда обработка завершена?
0 голосов
/ 29 ноября 2010

Я выяснил в чем проблема. Я использовал обратный вызов, данный сообщением из скрипта контента на фоновую HTML-страницу. Этот обратный вызов может быть запущен только один раз, поскольку для каждого сообщения, отправляемого на фоновую страницу, разрешен только один ответ.

Некоторая ошибка в chrome заставляет работать многие ответы, когда я добавляю предупреждение в функцию обратного вызова.

Проблема была решена путем разбиения содержимого сообщения на несколько сообщений.

0 голосов
/ 28 ноября 2010

Да, и обычно он запрашивает пользователя, хочет ли он / она продолжить ожидание или убить страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...