Когда выполнять определенные действия в расширении Google: onStartup, onInstalled или просто в JS - PullRequest
0 голосов
/ 24 ноября 2018

Как правило, не фанат задавать подобные открытые вопросы, но я не могу найти какой-либо надежной документации (независимой или от Google), которая очень ясна, а учебники и примеры конфликтуют друг с другом.

В настоящее времяЯ работаю с chrome.commands.onCommand, а также chrome.tabs.onCreated и chrome.tabs.onActivated, но меня также интересуют общие рекомендации (которые, как мне кажется, могут быть невозможны).Я нашел несколько ресурсов, таких как , этот и сэмплы , но сэмплы, в основном, с одним вкладышем (ПОЧЕМУ), и единственная полезная ссылка SO, которую я нашел, специально утверждает, что сообщениеспецифичные для этого API.

Я использую постоянную фоновую страницу (поскольку ответ SO говорит, что это имеет значение), и мне действительно нравится цитата из документации:

Если вам нужночтобы выполнить некоторую инициализацию, когда ваше расширение установлено или обновлено, прослушайте событие runtime.onInstalled.Это хорошее место, чтобы зарегистрироваться для декларативных правилWebRequest, записей contextMenu и других подобных одноразовых инициализаций

Но в настоящее время я делаю все свои регистрации в runtime.onInstalled и теряю привязки клавиш (вкладка ещекажется, работает, но опирается на сочетания клавиш, поэтому я не могу сказать наверняка), когда браузер падает и перезапускается.Я бы подумал, что привязки клавиш - это единовременная вещь инициализации, но явно нет.Я мог бы просто переместить привязки клавиш в onStartup, поскольку я знаю, что он не работает в onInstalled, но я бы предпочел знать лучшие практики для расширений (кого волнует, если я не буду использовать лучшие практики для какой-либо случайной библиотеки, но расширения всео лучшем коде imo).

Буду признателен за любую помощь, и если потребуется какая-либо другая информация, не стесняйтесь оставлять комментарии и дайте мне знать.Я предпочел бы не придумывать хотя бы минимальный пример, если это возможно, и придерживаться этого для руководящих принципов для chrome.commands, chrome.tabs, а также для общих руководящих принципов для постоянных страниц (хотя страницы событий приветствуются, так как кажутсяне быть хорошими ресурсами, и другие могут найти этот вопрос в будущем).

1 Ответ

0 голосов
/ 25 ноября 2018

Учитывая полезную информацию @wOxxOm и @ err1100, я решил самостоятельно ответить на этот вопрос.Мне нравится использовать комментарии в вопросе для пояснения, однако я часто вижу, что пользователи SO отвечают на вопрос в комментариях вместо того, чтобы публиковать ответ (возможно, потому что ответы в комментариях обычно более разговорчивы, чем формулировка ответа), но в любом случае я думаю, что вопросызаслуживают ответов.Если кто-то из них отправит ответ, я приму первое, которое отправит сообщение, или если кто-то, кроме них, отправит значительно лучший ответ (не воровайте их кредит).

Постоянные страницы:

Постоянные страницы, по-видимому, лучше поддерживаются в разных браузерах, поэтому в этом случае предпочтительнее (по крайней мере, по состоянию на 24.11.2008).В противном случае рассмотрите возможность использования страницы событий, если расширение предназначено только для Chrome, поскольку постоянство редко требуется.

onInstalled:

Контекстные меню и все, что имеет схему именования declarativeXXXX, должно быть инициализировано один раз вonInstalled событие, но не так много других вещей, требующих однократной инициализации.

onStartup:

С постоянными страницами скрипт загружается один раз и никогда не выгружается, если браузер не закрыт и т. Д. onStartup не имеет особого смысла.

В скрипте:

Как сказано выше, поскольку скрипт загружается только один раз при перезапуске браузера (и также запускается один раз, если установлен набраузер уже запущен) все инициализации сеанса просмотра можно выполнить здесь.

Страницы событий:

У меня не было четкого представления о том, для чего конкретно использовались непостоянные страницы (я считаю,это то, что wOxxOm называет страницей событий, прибегая к поиску информации, которая требует от меня исчезновения документации и перенаправления на документацию без термина) до этого вопроса, поэтому я уточню это для тех, кто может быть в одной лодке.Запускается непостоянный скрипт (в какой-то момент, IDK и не будет его тестировать), и регистрирует свои слушатели событий.После этого сценарий умирает, но слушатели остаются, что означает, что инициализация может быть выполнена с onInstalled и onStartup (поскольку я точно знаю, когда они выполняются, а не когда запускается непостоянный сценарий страницы) и всеми зарегистрированными вами событиями.прослушивание приведет к повторной активации этой части вашего скрипта (на самом деле просто запускается обратный вызов, предоставленный, но неважно).

onInstalled:

Так же, как с постоянными страницами, используйте это для тех же вещей, которые требуют один разинициализация.

onStartup:

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

В скрипте:

Как сказано выше, я не очень хорошо понимаю сценарии событий, но кажется, что это единственный кодв вашем сценарии должна быть настройка слушателей и любых переменных, которые нужны этим слушателям.Никаких существенных сценариев не должно происходить в сценарии, однако сделайте, как вы должны, конечно, сделать свое расширение (или просто использовать постоянную страницу).

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