我开发了一个非常简单的Thunderbird扩展。有一个简单的.xul文件,它通过script-tag引用.js文件。在那个javascript文件中,我正在compose-send-message事件上实现一个事件监听器。单击发送按钮时,我想加密邮件正文中的邮件,并在发送之前将其替换为新加密的文本。替换Thunderbird正文中的文本效果很好,但我无法通过简单的函数调用来引用另一个javascript文件,如
var encryptedData = encryption.encrypt(data);
用于文件encryption.js,它在发送之前专门处理所述电子邮件文本的加密。这两个文件都在同一个目录中,所以通常它们应该能够相互引用,不应该是它们吗?但对我来说,参考似乎永远不会起作用。你知道我能做些什么让它按预期工作吗?我似乎无法自己解决这个问题。提前致谢。
答案 0 :(得分:2)
我没有使用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"/>
使用subscript loader service,通过loadSubScript()
从主javascript文件中加载所需的额外javascript文件,作为下标:
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()
调用者的当前范围。
顺便说一句,charset参数也是可选的。