Firefox аддон требует дополнительного refre sh для работы - PullRequest
0 голосов
/ 24 апреля 2020

Я начал разрабатывать аддон, который будет работать на package.json репозитория Github. При загрузке аддона требуется дополнительная страница refre sh, чтобы аддон вступил в силу вместо применения границы, как только распознан URL.

manifest. json

{
  "manifest_version": 2,
  "name": "Border It",
  "version": "0.0.1",
  "permissions": ["activeTab", "tabs", "https://github.com/*"],
  "content_scripts": [
    {
      "matches": ["https://github.com/*/package.json"],
      "js": ["src/scripts/borderify.js"],
    }
  ]
}

borderify. js

document.body.style.border = '5px solid red';

Что я делаю не так?

1 Ответ

1 голос
/ 25 апреля 2020

GitHub обновляет содержимое страницы динамически, поэтому вам нужно запускать скрипт на всех страницах GitHub ("matches": ["https://github.com/*"]) и наблюдать за изменением местоположения. Вот еще подсказки: Событие, когда window.location.href изменяется

(обновлено). Пример реализации на основе MutationObserver:

{
  "manifest_version": 2,
  "name": "Border It",
  "version": "0.0.1",
  "permissions": [
    "activeTab",
    "tabs",
    "https://github.com/*"
  ],
  "content_scripts": [
    {
      "matches": ["https://github.com/*"],
      "js": ["borderify.js"]
    }
  ]
}
function onLocationChanged() {
  if (/\/package.json([?#]|$)/.test(location.pathname))
    document.body.style.border = '5px solid red';
  else
    document.body.style.border = '';
}
onLocationChanged(); // executed when the page is initially loaded

let lastUrl;

const observer = new MutationObserver(mutations => {
  // executed on any dynamic change in the page
  if (location.href == lastUrl)
    return;
  lastUrl = location.href;
  onLocationChanged();
});
const config = {
  childList: true,
  subtree: true
};
observer.observe(document.body, config);
...