FirefoxとChrome用のクロスブラウザ拡張機能を作成しようとしています。FirefoxはcommonJS仕様を使用し、ChromeはすべてをWebページのようにグローバル名前空間にまとめます。
再利用可能なコードを記述できるようにするために、requireJSを使用してChrome拡張機能のコードを検索しようとしています。これにより、commonJSモジュールを記述して、両方の環境で動作させることができます。
条件付きでモジュールを必要とするときに問題が発生します。たとえば、Firefoxはsimple-storage
、ローカルストレージへのアクセスに使用する必要があるモジュールへのアクセスを提供します。Chromeでは、彼らが提供するlocalStorageAPIを使用する必要があります。だから、私はこれをやろうとしてきました:
// storage.js
define(function(require, exports, module){
var store;
try {
// This module will only be available in the FF extension.
store = require('simple-storage').storage
} catch(error) {
// If it's not available, we must be in Chrome and we
// should use the localStorage object.
store = localStorage
}
// Use the store object down here.
});
ただし、これは機能していないようです。Chrome拡張機能を読み込もうとすると、次のエラーが発生します。
フォールバック付きのモジュールを要求するより良い方法はありますか?