Почему расширение моего браузера ничего не делает при загрузке страницы (кроме как в панели инструментов)?

#firefox-addon #browser-extension

#firefox-addon #расширение браузера

Вопрос:

Я пытался создать расширение Firefox. Я добился успеха в выполнении действий после взаимодействия с пользователем (например, действия браузера). Но я хочу, чтобы мое расширение делало что-то без взаимодействия с пользователем. Но что бы я ни делал, я ничего не могу добиться при загрузке страницы. Вот мой супер сокращенный код:

manifest.json

 {
  "name": "Test",
  "version": "0.1",
  "manifest_version": 2,
  "background": {
    "scripts": ["test.js"]
  }
}
  

test.js

 document.addEventListener("DOMContentLoaded", init);

function init() {
  document.body.innerHTML = "Hello world!";
}
  

Что я здесь делаю не так? Это работает в панели инструментов, но не где-либо еще!

Я также пытался добавить разрешения хоста, подобные этому:

 "permissions": [
    "*://*.facebook.com/*"
  ],
  

Ответ №1:

Попробуйте это:

manifest.json

 {
  "name": "Test",
  "version": "0.1",
  "manifest_version": 2,
  "background": {
    "scripts": ["background.js"]
  },
  "permissions": ["webNavigation", "*://*.facebook.com/*"]
}
  

background.js

 browser.webNavigation.onDOMContentLoaded.addListener(handleOnDOMContentLoaded, {
  url: [{ hostEquals: 'www.facebook.com' }],
});

function handleOnDOMContentLoaded({ tabId }) {
  browser.tabs.executeScript(tabId, { file: 'test.js' });
}
  

test.js

 document.body.innerHTML = 'Hello world!';
  

Комментарии:

1. Спасибо, но мне действительно нужно использовать функцию insertCSS в моем коде, и для этого она должна быть в фоновом скрипте. Это невозможно?

2. Возможно, я обновил код. Вы также можете добавить insertCSS handleOnDOMContentLoaded .