Надстройка Firefox: добавьте некоторые функции и объект к объекту окна

Я только начал использовать FireFox Builder для создания простого дополнения. Я понял, что не могу получить прямой доступ к объекту окна.

Что я хочу сделать, так это получить объект окна и загрязнить его некоторыми классами и функциями, чтобы я мог вызывать их с самой страницы.

Ниже приведен текущий код:

// This is an active module of the ritcoder Add-on
require("widget").Widget({
    id: "widgetID1",
    label: "My Mozilla Widget",
    contentURL: "http://www.mozilla.org/favicon.ico",
    onClick: function(evt){
        var tabs = require("tabs");
        var activeTab = tabs.activeTab;

        var notifications = require("notifications");
        notifications.notify({
          title: "Jabberwocky",
          text: "'Twas brillig, and the slithy toves",
          data: "did gyre and gimble in the wabe",
          onClick: function (data) {
            console.log(data);
            // console.log(this.data) would produce the same result.
          }
        });

        activeTab.window.a=20; //this fails
        context.alert('yesx');
    }
});

Как мне это сделать? Вставьте некоторый код в активную страницу, чтобы ее можно было вызвать.

с уважением,


person ritcoder    schedule 10.12.2011    source источник


Ответы (1)


Вам необходимо использовать tab.attach() для запуска скрипта содержимого в контексте вкладки, а затем используйте unsafeWindow, чтобы добавить свойства, которые может видеть скрипт страницы. (Вы также должны прочитать введение в Сценарии контента.)

Addon SDK не обеспечивает прямого доступа (без сценария содержимого) к странице из кода надстройки, потому что он пытается обеспечить прямую совместимость с планами запуска веб-страниц в процессах, отдельных от процессов браузера и надстройки. на этом процессе.

person Nickolay    schedule 11.12.2011
comment
Именно то, что я искал. Мне пришлось использовать unsafeWindow, чтобы иметь возможность добавлять что-то к объекту окна. Спасибо. - person ritcoder; 11.12.2011
comment
Спасибо, после поиска способа доступа к объекту окна открытой вкладки это единственное, что наконец сработало. Обратите внимание, что unsafeWindow — это переменная верхнего уровня в сценарии содержимого, а не подобъект чего-либо. - person andrew; 25.07.2013