Как работает tabs.onUpdated для аддонов Firefox? - PullRequest
0 голосов
/ 07 июля 2019

Я играю с аддонами Firefox, так что это в основном новое для меня. Кроме того, у меня мало знаний по JS. Поэтому в Документах (https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) я обнаружил событие «tabs.onUpdated», и оно идеально подошло бы моим потребностям (мне нужно событие, которое запускает функцию, если вкладка с определенным URL-адресом изменяет URL-адрес). Поэтому я скопировал примеры и прочитал меня через страницу, но я не мог заставить его работать. Кто-нибудь может мне помочь?

Спасибо акира


Код:

manifest.json:

{

  "manifest_version": 2,
  "name": "Testing Add-on",
  "version": "1.0",

  "description": "Test Add-on",

  "icons": {
    "48": "icons/border-48.png"
  },

  "content_scripts": [
    {
      "matches": ["*://developer.mozilla.org/*"],
      "js": ["content_script.js"]
    }
  ],

  "permissions": ["tabs", "<all_urls>"]
}

content_script.js: (просто чтобы проверить, работает ли скрипт)

console.log("Before");
browser.tabs.onUpdated.addListener((tabId, changed) => {
    if (changed.url) {
        console.log("True");
    }
})
console.log("After");

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

спасибо за добавление вашего manifest.json. В консоли браузера (той, которую вы открываете с помощью Ctrl + Shift + J или web-ext run --bc) вы можете увидеть следующее сообщение об ошибке:

TypeError: browser.tabs is undefined

Это потому, что вы используете browser.tabs в вашем скрипте контента, тогда как вы должны использовать его в фоновом скрипте.

Добавьте в свой файл манифеста следующее:

    "background": {
        "scripts": ["background_script.js"]
    }

-> где background_script.js содержит содержимое, которое имеет ваш content_script.js. Оставьте ваш контент-скрипт пустым. Это скрипт, который будет вставлен в страницы, которые соответствуют заданному шаблону URL.

Вы можете написать что-то вроде следующего в ваш файл content_script.js (только для тестирования): document.body.style.border = '5px solid red';

True (из обработчика onUpdated в фоновом скрипте) будет выводиться на консоль браузера (а не на консоль инструментов разработчика!) При изменении URL-адреса этой вкладки. Страницы, соответствующие шаблону URL, будут выделены красной рамкой;)

0 голосов
/ 07 июля 2019
    browser.tabs.onUpdated.addListener((tabId, changed) => {
        if (changed.url) {
            // URL of tab has changed
        }
    })

Итак, чтобы узнать, изменила ли вкладка с вашим конкретным URL свой URL, вам нужно сохранить ссылку на соответствующую вкладку.

ОБНОВЛЕНИЕ: Вы можете передать второй параметр extraParameters в addListener: browser.tabs.onUpdated.addListener(callback, { urls: [/*array of match patters. Fire the event only for tabs whose current url property matches any one of the patterns*/] })

соответствие шаблонам документов

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