1

Firefox を再起動しないと、Firefox 拡張機能に反映されたソース コードの変更を取得できません。ブートストラップアプローチを使用すると、これが可能になるはずです。

ソースコードは次のとおりです:
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」というファイルがあります。Firefox を再起動しない限り、about:extensions ページから有効化/無効化または削除/元に戻すと、loader.js に加えた変更が反映されません。コードが動的にロードされない理由へのポインターは役に立ちます。

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:

私の目標は、コードを変更するたびにブラウザーを再起動する必要なく、開発プロセスをスピードアップすることです。ここに関連する投稿がありますが、時代遅れのようです。

4

1 に答える 1

2

AddonManagerまたはより具体的には呼び出しXPIProviderですflushStartupCacheが、アドオンがアンインストールされたときのみ (アップグレード中およびダウングレード中を含む)。ただし、セッション中にアドオンを無効または有効にしても、キャッシュはクリアされません。

  • bootstrap.jsいつ呼び出すか、同等のメソッドをあなたに入れますshutdown(リリースバージョンではこれを行う必要があります)。
  • または、そのいまいましいブラウザをもう一度言い直してください。個人的には、「Restartless Restart」アドオンのキーボード ショートカットを使用して再起動し、about:addons でローミングする方が速いと思います。

PS:完全で再現可能な例を提供していないため、あなたのものをテストできないため、これが唯一の問題であるとは絶対に確信できません。

編集はい、確かに、以下をシャットダウンに追加するだけで十分であり、他のブロックの問題はありません:

if (reason == ADDON_DISABLE) {
  Services.obs.notifyObservers(null, "startupcache-invalidate", null);
}
于 2014-07-12T08:36:54.883 に答える