3

モジュールにファクトリ パターンを含めたい。ServiceFactory.js次のようなモジュールがあります。

exports.createService = function(serviceName, paramObj){
  return require('Services/'+serviceName).Service.new(paramObj);
};

このモジュールは、名前で他のモジュール (サービス) を要求し、インスタンスを作成する必要があります。一般Service.jsは次のようになります。

const Base = require('base').Base;

exports.Service = Base.extend({
    getName: function(){
        return this.name;
    },
    invoke: function(){
        //do something
    },
});

他のすべてのサービスは、基本サービスを拡張します。「lib」のサブフォルダー「Services」にすべてのサービスを収集します。ファクトリのメソッドを使用するcreateServiceと、次のようなエラーが表示されます。「モジュール: ServiceFactory ... Service/... をロードする権限がありません」

サービスをロードする権限を付与する方法ServiceFactoryはありますか、それとも目標を達成するための別の方法はありますか?

4

1 に答える 1

2

アドオン SDK は、アドオンがパッケージ化されるときにすべての要件を解決しますが、実行時には行われません。これは主にパフォーマンス上の理由で行われると思います (モジュールは複数の場所からロードされる可能性があり、拡張機能の実行中にこれらの場所を検索するのは遅くなる可能性があります) が、セキュリティの側面もあります - モジュールが危険にさらされた場合 (意図せずにコードを実行する場合) Web ページから取得したもの)、特にモジュールではなく、追加のモジュールをまだロードできませんchrome。しかし、最終的には、使用するモジュールを動的に決定することはできず、ソース コードで明示的に必要なモジュールのみをロードできます。

あなたの場合の回避策は、呼び出されることはありませんがrequire()、SDK がそれらを解決するために必要なすべての呼び出しがある関数を追加することです。

function dummy()
{
  require("Services/ServiceFoo");
  require("Services/ServiceBar");
  ...
}

この関数をServiceFactor.js含めることで、createService()関数がこれらのモジュールを要求できるようになります。

于 2012-04-18T07:31:33.280 に答える