我正在尝试在 javascript 模块 jquery.jsm 中添加 jQuery 库。 我在其他模块中使用 jquery.jsm。 jQuery 需要一个窗口对象,所以我不能使用原来的 jQuery 代码。我需要定义一个窗口对象。
jquery.jsm:
const EXPORTED_SYMBOLS = ['jQuery'];
var xjQuery = null;
var window = null;
var location = null;
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);
var enumerator = wm.getEnumerator(null);
if (enumerator.hasMoreElements()) {
var win = enumerator.getNext();
window = win;
location = win.location;
}
如何在其他模块中使用原始 jQuery 文件? 我在这篇文章的指导下 - https://forum.jquery.com/topic/jquery-1-4-2-inside-a-firefox-extension
最佳答案
我的解决方案:
jquery.jsm
"use strict";
/**
* Wrapper module to load jQuery library
*/
const EXPORTED_SYMBOLS = ['jQuery'];
// Window object
let scope = {
window: null,
document: null
};
// Scope object (required for jQuery)
let wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);
let enumerator = wm.getEnumerator(null);
if (enumerator.hasMoreElements()) {
let win = enumerator.getNext();
scope.window = win;
scope.document = win.document;
}
// Add jQuery original library
let url = "chrome://esign/content/script/jquery-3.3.1.min.js";
let loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
.getService(Components.interfaces.mozIJSSubScriptLoader);
loader.loadSubScript(url, scope);
let jQuery = scope.window.jQuery;
关于javascript - 如何在 Thunderbird 扩展的其他模块中使用原始 jQuery 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49687243/