Есть ли хук/API-функция для расширения Chrome после установки, которая позволит мне выполнить действие после установки или обновления плагина?
Я хотел бы выполнить действие после установки моего расширения, и только сразу после его установки. Это действие должно выполняться только один раз (после установки или после обновления) расширения.
Некоторые люди предложили установить версию расширения в localStorage, проблема, с которой я столкнулся, заключается в том, что скрипт контента, имеющий доступ к localStorage, не загружается на страницу при первой установке плагина.
AFAIK после установки плагина и использования им скрипта содержимого, внедренного во вкладку/страницу, страница должна быть перезагружена.
Я не знаю, как получить доступ к localStorage из фоновой страницы; доступ к localStorage можно получить только из скрипта содержимого.
Для получения номера версии из фоновой страницы в скрипт содержимого требуется использование функции API chrome для выполнения скриптов:
chrome.tabs.executeScript(null, {code:function_to_execute}, function() { // callback });
Однако, когда вы устанавливаете плагин, а страница, на которую этот плагин должен внедрить скрипт содержимого, уже загружена, он не внедряет скрипт содержимого, приходится перезагружать страницу.
При более детальном рассмотрении некоторых советов, для сохранения номера версии можно получить доступ к localStorage фоновой страницы. Однако для того, что мне нужно сделать, а именно перезагрузить определенную вкладку по определенному URL (чтобы убедиться, что скрипт содержимого является самой новой версией) после установки или обновления плагина, оказалось, что нет необходимости возиться с localStorage.
Чтобы не отклоняться от темы, совет о записи номера версии в localStorage (на фоновой странице) и последующей проверке номера версии в файле манифеста достаточно хорош, чтобы позволить кому-то запустить скрипт при первой установке/обновлении.
Сделать файл манифеста доступным для фоновой страницы (примечание: это взято откуда-то еще, я не ставлю себе это в заслугу, но я не могу вспомнить источник, если вы знаете, дайте мне знать, и я добавлю его).
// MAKE MANIFEST FILE AVAILABLE
chrome.manifest = (function() {
var manifestObject = false;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
manifestObject = JSON.parse(xhr.responseText);
}
};
xhr.open("GET", chrome.extension.getURL('/manifest.json'), false);
try {
xhr.send();
} catch(e) {
console.log('Couldn\'t load manifest.json');
}
return manifestObject;
})();
Теперь вы можете получить доступ к номеру вашей версии следующим образом: chrome.manifest.version
Для записи в localStorage просто передайте его следующим образом: localStorage['my_plugin_version'] = chrome.manifest.version