使用nsIDOMGlobalPropertyInitializer将对象注入特定页面

时间:2012-08-07 12:52:23

标签: javascript firefox-addon xpcom

我需要使用nsIDOMGlobalPropertyInitializer将名为“smth”的对象注入带有特定URL的页面上的窗口。有没有办法实现这个?如果window.smth在其他页面上返回undefined,那就没问题了。

// currently
init: function(aWindow) {
    let self = this;
    let window = XPCNativeWrapper.unwrap(aWindow);

    if (window.location.href !== pageURL) {
        return;
    }

    return {
            // ...
    }
}

现在window.smth在其他页面上返回XPCOM包装的nsISupports对象:(

1 个答案:

答案 0 :(得分:1)

我不知道如果可以采用这种方法,但至少可以听取“内容文档 - 全局创建”通知:https://developer.mozilla.org/en-US/docs/Observer_Notifications#Documents并且只注入全局< / p>

observe: function(subject, topic, data) {
    if (topic === 'content-document-global-created' && 
        subject instanceof Ci.nsIDOMWindow) {
        if (!subject.location.href.match(/http:\/\/example.com/)) {return;}
        XPCNativeWrapper.unwrap(subject).myGlobal = {};
    }
}