0

我正在尝试将现有的 firefox 插件代码移植到新的多进程架构中。在我现有的代码中,我可以addon install event使用以下代码启动一个新选项卡:

function install(data, aReason) {
    if (aReason == ADDON_INSTALL) {
        var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
            .getService(Components.interfaces.nsIWindowMediator);
        var mainWindow = wm.getMostRecentWindow("navigator:browser");
        mainWindow.gBrowser.addTab('http://www.mywebsite.org/install-success-page.html');

    }

    if (aReason == ADDON_UPGRADE) {

        var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
            .getService(Components.interfaces.nsIWindowMediator);
        var mainWindow = wm.getMostRecentWindow("navigator:browser");
        mainWindow.gBrowser.addTab('http://www.mywebsite.org/update-success-page.html');
    }

}

在对 bootstrap.js 进行更改以使其multiprocess firefox兼容(使用其他扩展程序代码的帮助)后,插件会按预期加载和运行,但上述代码无法加载新选项卡,并且控制台中不会显示错误!!!

4

1 回答 1

1

这应该有效:

var Cu = Components.utils;
var { require } = Cu.import(resource://gre/modules/Services.jsm", {});
const tabs = require("sdk/tabs");
tabs.open(url);

此外,与任何平台代码相比,这在未来不太可能中断。

于 2015-04-26T22:28:07.930 回答