我开发了一个非常简单的Thunderbird扩展。有一个简单的.xul文件,它通过脚本标签引用.js文件。在该javascript文件中,我正在撰写发送消息事件上实现一个事件侦听器。单击发送按钮时,我想加密邮件正文中的邮件,并在发送之前将其替换为新加密的文本。替换 Thunderbird 正文部分中的文本效果很好,但我无法使用简单的函数调用引用另一个 javascript 文件,例如
var encryptedData = encryption.encrypt(data);
用于文件加密.js,它专门处理发送前所述电子邮件文本的加密。这两个文件都在同一个目录中,所以通常它们应该能够相互引用,不是吗?但对我来说,这种提法似乎永远行不通。您知道我能做些什么来使其按预期工作吗?我自己似乎无法弄清楚这一点。提前谢谢。
我没有使用Thunderbird附加组件的经验,但有Firefox附加组件的经验。但是,我相信同样的机制也适用于Thunderbird。
您有两种选择(或者可能更多,我不知道):
-
在主javascript文件之前,在xul文件中包含所需的额外javascript文件(或者你已经尝试过了?
<script type="application/javascript" src="chrome://path/to/extra.js"/> <script type="application/javascript" src="chrome://path/to/main.js"/>
从主javascript文件 内部加载所需的额外javascript文件,作为下标,使用下标加载器服务,通过
loadSubScript()
:var mozIJSSubScriptLoader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"] .getService(Components.interfaces.mozIJSSubScriptLoader); mozIJSSubScriptLoader.loadSubScript( 'chrome://path/to/extra.js', optionalScope, 'UTF-8' );
该
optionalScope
允许您将脚本变量加载到指定的对象中。如果省略,脚本变量将被加载到loadSubScript()
调用方的当前作用域中。顺便说一下,字符集参数也是可选的。