diff --git a/common/content/dactyl.js b/common/content/dactyl.js index 68b49855..e5e25dea 100644 --- a/common/content/dactyl.js +++ b/common/content/dactyl.js @@ -669,13 +669,8 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), { let body = XML(); for (let [, context] in Iterator(plugins.contexts)) try { - let info; - if (isinstance(context, ["Sandbox"])) - info = "INFO" in context && XML(dactyl.userEval("this.INFO instanceof XML && this.INFO.toXMLString()", context)); - else if (context && context.INFO instanceof XML) - info = context.INFO; - - if (info) { + let info = contexts.getDocs(context); + if (info instanceof XML) { if (info.*.@lang.length()) { let lang = config.bestLocale(String(a) for each (a in info.*.@lang)); diff --git a/common/modules/contexts.jsm b/common/modules/contexts.jsm index 2bd723a8..e5791435 100644 --- a/common/modules/contexts.jsm +++ b/common/modules/contexts.jsm @@ -216,11 +216,12 @@ var Contexts = Module("contexts", { contexts.removeGroup(this.GROUP); }) }); + if (group !== this.user) Class.replaceProperty(plugins, file.path, self); // This belongs elsewhere - if (isPlugin && args) + if (isPlugin) Object.defineProperty(plugins, self.NAME, { configurable: true, enumerable: true, @@ -357,6 +358,19 @@ var Contexts = Module("contexts", { return group; }, + getDocs: function getDocs(context) { + try { + if (isinstance(context, ["Sandbox"])) { + let info = "INFO" in context && Cu.evalInSandbox("this.INFO instanceof XML && INFO.toXMLString()", context); + return info && XML(info); + } + if (typeof context.INFO == "xml") + return context.INFO; + } + catch (e) {} + return null; + }, + bindMacro: function (args, default_, params) { const { dactyl, events, modules } = this.modules;