Задать вопрос
Martovitskiy
@Martovitskiy

Как восстановить соединение с вкладкой при обновлении плагина?

Пишу расширение, сталкиваюсь с проблемой, когда плагин обновляю или отключаю, а потом включаю.
Как восстановить соединение?
manifest.json
{
  "manifest_version": 3,
  "name": "Test",
  "description": "Test",
  "version": "1.0",
  "icons": {
    "128": "128х128-started.png"
  },
  "background": {
    "service_worker": "background-wrapper.js"
  },
  "content_security_policy": {
    "extension_pages": "script-src 'self'; object-src 'self'"
   },
  "action": {
    "default_icon": {
      "128": "128х128.png"
    },
    "default_title": "Настройки",
    "default_popup": "views/popup.html"
  },
  "web_accessible_resources": [{
    "resources": ["listen.js"],
    "matches": [],
    "extension_ids": []
  }],
  "permissions": [
    "notifications",
    "activeTab",
    "storage",
    "cookies",
    "webRequest",
    "tabs",
    "history",
    "browsingData",
    "contextMenus"
  ],
  "host_permissions": ["*://*/*", "<all_urls>"],
  "content_scripts" : [{
    "matches" : [ "https://developers.facebook.com/apps/*/settings/advanced/*"],
    "js" : ["listen.js"]
  }],
  "externally_connectable": {
    "ids": ["*"],
    "matches": ["*://*.facebook.com/*"]
  }
}


listen.js
(function() {
    "use strict";
    let str = window.location.href;
    let matches = str.match('^(https:\/\/developers\.facebook\.com\/apps\/)([0-9]{1,})(\/settings\/advanced)');
    if (matches && matches.length > 2) {
        let appId = matches[2];
        if (appId) {
                setInterval(function () {
                    chrome.storage.local.get(['clicklead-fb-app-share-keys'], function (data) {
                        let keys = data['clicklead-fb-app-share-keys'],
                            time = new Date().getTime();
                        keys = keys ? keys : [];
                        if (keys[appId] && time - keys[appId] < 3000) {
                            appId = null;
                            stop = true;
                            return;
                        }
                        else {
                            keys[appId] = new Date().getTime();
                            chrome.storage.local.set({'clicklead-fb-app-share-keys': keys});
                        }
                    });
                }, 1000);
        }
    }
}).call(this);


При перезагрузке расширения, получаю ошибку local is not defined, т.к. приложение уже выгружено и ожидает перезагрузки и внедрения listen.js. Как правильно решить проблему?
  • Вопрос задан
  • 30 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Martovitskiy
@Martovitskiy Автор вопроса
Решил перезагрузкой страницы и инициализацией заново
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы