我正在尝试为 Firefox 和 Chrome 编写跨浏览器扩展。Firefox 使用 commonJS 规范,而 Chrome 只是将所有内容都集中到全局命名空间中,就像网页一样。
为了能够编写可重用的代码,我正在尝试使用 requireJS 在 Chrome 扩展中加载代码,这样我就可以编写 commonJS 模块并让它们在两种环境中工作。
当我需要有条件地需要模块时,我遇到了问题。例如,Firefox 提供对simple-storage
您应该用来访问本地存储的模块的访问。在 chrome 中,我需要使用他们提供的 localStorage API。所以,我一直在尝试这样做:
// 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 扩展程序时,出现以下错误:
有没有更好的方法来要求具有后备功能的模块?