35

Chrome拡張機能を作成しました。私の background.js ファイルは非常に大きいので、それを小さな部分に分割し、必要に応じて指定されたメソッドをロードしたいと考えています (ある種の遅延読み込み)。

私はFirefoxでこれを行いました:

// ( call for load specified lib )
var libPath = redExt.basePath + 'content/redExt/lib/' + redExt.browser + '/' + libName + '.js';
var service = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader);
service.loadSubScript("chrome://" + libPath);
// ( executing loaded file )

Webkit ベースのブラウザーで同様の方法を実行する可能性はありますか? 一致するページに複数の JS ファイルを挿入する方法 (を使用manifest.json) の解決策を見つけましたが、拡張のためだけに JS ファイルを含める方法が見つかりません。

4

5 に答える 5

46

更新: このソリューションは、マニフェスト V2 を使用している場合にのみ機能します。

ここで説明されている非常に簡単な方法でもこれを行うことができます: https://developer.chrome.com/extensions/background_pages#manifest

{
  "name": "My extension",
  ...
  "background": {
    "scripts": [
      "lib/fileone.js",
      "lib/filetwo.js",
      "background.js"
    ]
  },
  ...
}

遅延読み込みを行うことはありませんが、コードを複数のファイルに分割し、それらがバックグラウンド ページに読み込まれる順序を指定できます。

于 2015-01-08T12:57:47.407 に答える
1

可能な解決策が見つかりました。JavaScript コールバック トレースを使用してメイン拡張ファイルをロードするためのイベントを検索し、拡張コンテキストでそれを実行するようにバインドする RequireJS メイン メソッド require の簡単な実装があります。 https://github.com/salsita/browser-require/blob/master/require.js

機能しているように見えますが、このソリューションにはいくつかの短所があります。

  • バグ レポートは「行 1、列 1」で報告されます。これは、このソリューションがコードを直接挿入するためです。func.callデバッグは非常に困難です。
  • 読み込まれた JS ファイルがコンソールに表示されない / chromebug
  • 現在のタブが HTTPS を使用している場合、Chrome はスクリプトの評価を禁止します。特にこれはローカル コンテキスト ( file:///) から許可されないため、期待どおりに動作しないことがあります。
于 2013-09-06T07:17:36.920 に答える