Расширения Mozilla: переменные области - PullRequest
2 голосов
/ 04 февраля 2020

AFAIK, все переменные верхнего уровня в скриптах содержимого должны быть глобально уникальными в пределах окна. Поэтому, если два скрипта содержимого содержат строку типа let port = ...;, расширение будет нарушено. Такое поведение делает разделение проблем очень трудным, потому что, если вы сгруппируете функциональность по каталогам и файлам, вы будете запутывать, какие имена переменных все еще можно использовать. Есть ли канонический способ избежать этой проблемы?

Вот минимальный пример:

manifest. json

{
  "manifest_version": 2,
  "name": "test",  
  "version": "1.0",

  "applications": {
    "gecko": {
      "id": "test_script@example.com"
    }
  },

  "content_scripts": [
    {
      "matches": ["*://*.google.com/*"],
      "js": ["read/index.js", "write/index.js"]
    }
  ] 
}

read / index. js

console.log("i am read");

запись / индекс. js

console.log("i am write");

Когда страница Google загружена, на консоль будут выведены «я прочитан» и «я пишу». Но что, если мы сделаем несколько небольших изменений в скриптах содержимого:

чтение / индекс. js

let message = "i am read";
console.log(message);

запись / индекс. js

let message = "i am write";
console.log(message);

Теперь будет печататься только «я прочитан».

1 Ответ

1 голос
/ 04 февраля 2020

Я был глупым. Спасибо LukStorms за ответ: мне просто нужно обернуть код в файлы сценариев в функцию, чтобы установить соответствующую область видимости. Прошло много времени с тех пор, как я кодировал JavaScript Я думаю ...

Для потомков есть два распространенных способа обернуть ваш код, который я знаю:

(() => {
  code here...
})()

и

function main() {
  code here...
}
main();
...