firefox restartless bootstrap扩展脚本没有重新加载

时间:2014-07-12 08:18:29

标签: javascript firefox firefox-addon firefox-addon-restartless

我无法在不重启firefox的情况下获得firefox扩展中反映的源代码修改。 我相信在使用bootstrap方法时这应该是可能的。

这是源代码:
bootstrap.js

var GOOGBAR_MODULES = [ "resource://googbar/loader.js"];

function startup(params, reason)
{

    var res = Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
    var modulesURI = Services.io.newURI(__SCRIPT_URI_SPEC__ + "/../content/", null, null);
    res.setSubstitution("googbar", modulesURI);
    Cu.import("resource://googbar/loader.js");
} 


function shutdown(params, reason)
{ 
    // Unload all modules added with Cu.import
    GOOGBAR_MODULES.forEach(Cu.unload, Cu);

    // Clear our resource registration
    var res = Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
    res.setSubstitution("googbar", null);

}

loader.js

console.log("googbar loader loaded");

当我在加载器中更改消息时,它不会反映在firefox(版本30)中。我在配置文件扩展文件夹中有一个文件“goog@myself.com”,其中包含我的开发文件夹的路径。 我对loader.js所做的更改并不反映当我启用/禁用或从about:extensions页面删除/撤消时,除非我重启firefox。 任何指向代码未动态加载的指针都会有所帮助。

我对使用SDK进行开发不感兴趣。我还设置了https://developer.mozilla.org/en-US/Add-ons/Setting_up_extension_development_environment

中描述的各种标志

编辑1:

这是上面代码的链接打包为xpi(1.35KB)我用来测试场景。 https://www.dropbox.com/s/0io8b081ybu632q/test.xpi

编辑2:

我的目标是加快开发过程,而不必为每次代码更改重新启动浏览器。这是一个相关的post,但似乎是一个过时的。

1 个答案:

答案 0 :(得分:2)

AddonManager或更具体地XPIProvider调用flushStartupCache,但仅在卸载加载项时(包括在升级和降级期间)。但是,在会话中禁用或启用加载项时,不会清除缓存。

  • bootstrap.js shutdown中使用等效方法(在发布版本中应该这样做)。
  • 或者只是继续重述该死的浏览器。就个人而言,我发现使用"Restartless Restart"附加键盘快捷键重新启动并在about:addons中漫游时更快。

PS:我不能完全确定这是唯一的问题,因为我无法测试你的东西,因为你没有提供完整的,可重现的例子。

编辑是的,确实,将以下内容添加到关闭状态就足够了,并且没有其他阻止问题:

if (reason == ADDON_DISABLE) {
  Services.obs.notifyObservers(null, "startupcache-invalidate", null);
}