Веб-расширение Safari - вставка скрипта только при нажатии кнопки расширения

Для простоты я беру ссылку на пример расширения SeaCreator от Apple.

Вы можете взять его отсюда: https://drive.google.com/file/d/1loBDgkJAEtyh0QehOUlgOSyUnW9ZZDk6/view?usp=sharing

В этом примере, как уже упоминалось, мы заменяем названия рыб другими эмодзи.

Дело в том, что когда мы нажимаем на значок расширения, он становится синим, чтобы указать, что расширение активно, и всякий раз, когда отображается какая-либо страница, все имена рыб будут автоматически заменены смайликами.

Смотрите скриншот - › введите здесь описание изображения

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

В коде, который я приложил, я пробовал несколько вещей, но ничего не помогло.

//browser.runtime.addEventListener("message", handleMessage, false);
//function handleMessage(msgEvent) {
//    alert('message received');
    var wordReplacementMap = {"Fish": "????", "Shark": "????", "Squid": "????", "Whale": "????"};
    for (var wordToReplace in wordReplacementMap) {
        replace(document.body, wordToReplace, wordReplacementMap[wordToReplace]);
    }
//}

//chrome.runtime.sendMessage("message");

Я всегда сталкиваюсь с -› undefined browser или undefined chrome.

В моем первоначальном проекте расширения я также использовал модули узлов и AJAX, поэтому существует множество зависимостей, поэтому я взял ссылку на пример Apple.

Главное, я хочу отключить автоматическую инъекцию скрипта и выполнять код скрипта только тогда, когда пользователь нажимает кнопку расширения. Мне не нужно всплывающее окно - просто выполнение по нажатию кнопки.

Пожалуйста, дайте мне знать, если кто-нибудь может помочь.


person Paresh Thakor    schedule 07.07.2020    source источник


Ответы (1)


О, это так странно. Я получил это так поздно, что мне пришлось включить ключ сценария background в manifest.json, кроме ключа 'content_script'.

"background" : {
    "scripts" : [
      "bundle.js"
    ]
  },
  "content_scripts": [{
      "js": [ "init.bundled.js" ],
      "matches": [ "<all_urls>" ]
  }]

У меня уже есть метод chrome.browserAction.onClicked..., написанный внутри bundle.js, который вызывается каждый раз, когда я нажимаю кнопку расширения на панели инструментов Safari.

Фух.

person Paresh Thakor    schedule 19.07.2020