diff --git a/lib/require.js b/lib/require.js index ec05826..7549f60 100644 --- a/lib/require.js +++ b/lib/require.js @@ -2,33 +2,47 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -window.scope = {}; -function require(module){ +const require = function(){ "use strict"; - if (module.startsWith("./")){ - var scopeName = module.substr(2).replace(/\..+/, ""); - return window.scope[scopeName]; - } - else if (module === "sdk/getWrapped"){ - return function getWrapped(obj){ - return obj.wrappedJSObject || obj; - }; - } - else if (module === "sdk/simple-prefs"){ - return { - prefs: settings, - on: function(key, callback){ - browser.storage.onChanged.addListener(function(changes, area){ - if (area === "local"){ - if (changes.hasOwnProperty(key)){ - callback(changes[key].newValue); + window.scope = {}; + const scope = window.scope; + function require(module){ + if (module.startsWith("./")){ + var scopeName = module.substr(2).replace(/\..+/, ""); + return scope[scopeName]; + } + else if (module === "sdk/getWrapped"){ + return function getWrapped(obj){ + if (!obj){ + return obj; + } + var wrapped; + try { + wrapped = obj.wrappedJSObject || obj; + } + catch (e){ + require("./logging").error("getWrapped failed for", obj, ":", e); + wrapped = obj; + } + return wrapped; + }; + } + else if (module === "sdk/simple-prefs"){ + return { + prefs: settings, + on: function(key, callback){ + browser.storage.onChanged.addListener(function(changes, area){ + if (area === "local"){ + if (changes.hasOwnProperty(key)){ + callback(changes[key].newValue); + } } - } - }); - } - }; + }); + } + }; + } + throw new ReferenceError("Unable to get non relative module " + module + "!"); } - throw new ReferenceError("Unable to get non relative module " + module + "!"); -} -window.scope.require = require; \ No newline at end of file + return require; +}(); \ No newline at end of file