javascript - 如何在 Thunderbird 扩展的其他模块中使用原始 jQuery 库

标签 javascript jquery thunderbird thunderbird-addon

我正在尝试在 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/

相关文章:

javascript - 如何向按钮 angularjs 内的字符串添加省略号

Javascript 重构 - 怎么做?

javascript - 使用 Rails/jQuery 的可点击表格行 - 无法正常工作的行内链接

javascript - 如何在 HTML 中自动垂直滚动到一行?

javascript - 触摸(点击)移动设备不起作用

php - UTF-8 纠正后出现奇怪的编码问题 "most"

javascript - 在 gruntjs 构建失败的情况下强制执行某些任务

javascript - 用户输入时旋转内容可编辑移动

dictionary - 为 Thunderbird 拼写检查添加新语言

thunderbird - 开始使用 Thunderbird 扩展