【问题标题】:Firefox Extension - New Tab - How To Override Preferences?Firefox 扩展 - 新标签 - 如何覆盖首选项?
【发布时间】:2015-09-27 13:49:39
【问题描述】:

我是 Firefox 扩展的新手,这就是我使用 Add On SDK 的原因。

我想创建一个扩展程序,每次用户打开一个新标签时都会显示一个特定的网站。到目前为止,这是我的代码:

var self = require("sdk/self");
var tabs = require("sdk/tabs");

// Listen for tab openings.
tabs.on('open', function onOpen(tab) {
   getActiveTab();
});

function getActiveTab(){
tabs.on('activate', function (tab) {
  tab.url = "http://www.example.com";
});
}

这行得通。但在加载指定域之前,它会加载 Firefox 默认的新标签页。现在是否有 API 参考可以访问 newtab 设置并更改为 example.com?

谢谢,

杰德

【问题讨论】:

    标签: firefox firefox-addon firefox-addon-sdk


    【解决方案1】:

    可以使用 SDK 更改 about:newtab URL:

    require('sdk/preferences/service').set('browser.newtab.url', 'http://www.stackoverflow.com');
    

    但它会在 FF41 中过时,因为不再有 browser.newtab.url 偏好。


    如果您仍打算使用它,您也可以考虑将其添加到您的代码中:

    var { when: unload } = require('sdk/system/unload');
    var reason;
    unload( function ( reason ) {
      require('sdk/preferences/service').set('browser.newtab.url', 'about:newtab');
    });
    

    以便在加载项卸载后取消偏好更改。您还可以将卸载原因之一传递给函数:'uninstall''disable''shutdown''upgrade''downgrade',或者根本不提供 reason 参数/保留它未定义。

    【讨论】:

    • 是的,我很想知道现在如何解决这个问题。我使用 http 观察者尝试了它,但它没有工作:discourse.mozilla-community.org/t/…
    • @gerdtf 和 Sagi 请参阅下面塞巴斯蒂安的回答,这是 Fx 未来版本的正确方法。
    【解决方案2】:

    由于 browser.newtab.url 首选项已被删除,这是执行此操作的新方法:https://github.com/sblask/firefox-open-tabs-next-to-current/blob/master/lib/helpers.js#L50 模块的代码可以在这里找到:https://dxr.mozilla.org/mozilla-central/source/browser/modules/NewTabURL.jsm

    如果您还想替换主页,则必须更改 browser.startup.homepage 首选项。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多