Установить объект в объекте окна страницы из расширения Firefox? - PullRequest
1 голос
/ 17 сентября 2009

Я хочу, чтобы мое расширение Firefox добавило объект в окно содержимого просматриваемой страницы. Я хочу, чтобы это имело тот же эффект, что и бег:

top.myobj = {val : 3};

внутри элемента скрипта на странице.

Есть идеи?

Я не думаю, что здесь есть угроза безопасности, поскольку я только добавляю объект с одним целочисленным свойством. Есть ли простой способ получить объект окна содержимого из кода расширения?

Ответы [ 3 ]

2 голосов
/ 17 сентября 2009

использование

var mainWindow = window
    .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
    .getInterface(Components.interfaces.nsIWebNavigation)
    .QueryInterface(Components.interfaces.nsIDocShellTreeItem).rootTreeItem
    .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
    .getInterface(Components.interfaces.nsIDOMWindow);

mainWindow.getBrowser().addEventListener("DOMContentLoaded",
                        youreventhandler, true);

function youreventhandler(event) {
    if (event.originalTarget instanceof HTMLDocument) {

        var doc = event.originalTarget;
        //doc = the document in the just loaded window

        var win = doc.defaultView;

        // if it's just a frame element, then return and wait for the   
        // main event to fire.
        if (win.frameElement)
            return;
        else {
            win.myobj = { val: 3};
            //your other code here
        }
    }
}
1 голос
/ 12 октября 2009

Вы должны использовать evalInSandbox для выполнения назначения в контексте window.content аналогично этому коду :

// |content| refers to the current tab's |window| object
var s = new Components.utils.Sandbox(content);
s.window = content;
Components.utils.evalInSandbox(
   "window.wrappedJSObject.test = function() { } ", s) 

Кстати, «Я не думаю, что здесь есть угроза безопасности» - добавление свойства к объекту может привести к выполнению кода (так как в JS есть сеттеры), поэтому касание содержимого всегда опасно. Приведенный выше пример касается только небезопасного объекта (content.wrappedJSObject) в песочнице без разрешений Chrome, поэтому все в порядке.

0 голосов
/ 17 сентября 2009

Должно ли это быть окно, или это может быть сам документ? Вы всегда можете использовать content.document со ссылкой на саму страницу. Или window.content для основного окна содержимого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...