在 Thunderbird 扩展中,不同的 JavaScript 文件如何相互引用



我开发了一个非常简单的Thunderbird扩展。有一个简单的.xul文件,它通过脚本标签引用.js文件。在该javascript文件中,我正在撰写发送消息事件上实现一个事件侦听器。单击发送按钮时,我想加密邮件正文中的邮件,并在发送之前将其替换为新加密的文本。替换 Thunderbird 正文部分中的文本效果很好,但我无法使用简单的函数调用引用另一个 javascript 文件,例如

var encryptedData = encryption.encrypt(data);

用于文件加密.js,它专门处理发送前所述电子邮件文本的加密。这两个文件都在同一个目录中,所以通常它们应该能够相互引用,不是吗?但对我来说,这种提法似乎永远行不通。您知道我能做些什么来使其按预期工作吗?我自己似乎无法弄清楚这一点。提前谢谢。

我没有使用Thunderbird附加组件的经验,但有Firefox附加组件的经验。但是,我相信同样的机制也适用于Thunderbird。

您有两种选择(或者可能更多,我不知道):

  1. 在主javascript文件之前,在xul文件中包含所需的额外javascript文件(或者你已经尝试过了?

    <script type="application/javascript" src="chrome://path/to/extra.js"/>
    <script type="application/javascript" src="chrome://path/to/main.js"/>
    
  2. 从主javascript文件
  3. 内部加载所需的额外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()调用方的当前作用域中。

    顺便说一下,字符集参数也是可选的。

相关内容

  • 没有找到相关文章

最新更新