JSM расширения Firefox и пространство имен ettiquite - PullRequest
2 голосов
/ 30 апреля 2011

Так что в расширениях Firefox рекомендуется, чтобы объекты вашего расширения жили в подобъектах, таких как com.contoso.myExtension.Таким образом, вы не помещаете никаких объектов в глобальное пространство имен, а расширения обычно остаются вне досягаемости друг друга.(По крайней мере, в обычном окне browser.xul)

Но из того, что я понимаю о модулях кода Javascript (JSM) , является то, что хотя сам модуль работает в отдельном пространстве именсимволы, которые он экспортирует, окажутся в глобальном пространстве имен любого кода, импортирующего его.Кроме того, невозможно, чтобы расширение было «хорошим» и пыталось только создавать подобъекты;эти экспортированные символы будут просто уничтожать любые существующие глобальные переменные.Также вы не можете экспортировать такие символы, как com.contoso.myExtension.Это всего лишь простая глобальная переменная.

Так, каков протокол для хорошей игры при использовании JSM?Просто сделайте действительно длинные имена переменных и надейтесь, что они не столкнутся?

1 Ответ

3 голосов
/ 01 мая 2011

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

Вы правы относительно модулей кода Javascript, живущих в отдельном пространстве имен (так сказать), однако при импорте их не нужно импортировать в глобальное пространство имен. Если вы посмотрите документацию Components.utils.import , вы увидите, что вы можете импортировать данные в определенную область. То есть вам вообще не нужно загрязнять глобальное пространство имен .

Вы можете собрать свои модули в пространство имен myExtension.

var myExtension = {};
Components.utils.import("resource://.../module.jsm", myExtension);

И оборачивая это внутри самореализующейся функции, вы не пропустите ни одной переменной в глобальное пространство имен, даже myExtension!

(function(){
    var myExtension = {};
    Components.utils.import("resource://.../module.jsm", myExtension);
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...