Firefox附加组件:可能在bootstrap.js和main.js之间进行通信吗?

时间:2014-12-18 23:07:23

标签: firefox-addon firefox-addon-sdk

我想在bootstrap.js中进行一些处理,然后将其发送到main.js以显示用户界面。 是否可以在Bootstrapped Firefox Add-on中的bootstrap.js文件和main.js文件之间进行通信?

1 个答案:

答案 0 :(得分:2)

bootstraped Firefox add-on中,您可以在bootstrap.js文件与附加组件中的任何其他文件之间进行通信。实际上,至少在为插件设置其他入口点(例如按钮,UI控件等),加载模块等的情况下这样做是正常的。 bootstrap.js中的install()startup()shutdown()uninstall()方法是您在设置其他人之前加入的唯一条目(通常设置)从startup()开始。

从代码的组织方式来看,bootstrap.js包含超出最低限度设置附加组件所需代码的代码是不常见的。通常,bootstrap.js中的代码或bootstrap.js直接调用的代码不应包含任何大量的处理或计算。所有不需要需要来显示Firefox UI的内容都应该延迟到Firefox UI完全初始化并可供用户使用之后。这样做的原因是,尽可能快地让用户可以使用主要的Firefox UI比使用立即显示Firefox用户界面所需的几乎所有处理/设置更为重要。这包括设置数据结构或在用户以某种方式与用户交互之前实际未使用的计算。一旦用户点击你的插件按钮(或以其他方式与你的插件交互),这种事情被认为要好得多,而不是延迟向用户显示用户执行这些任务的主要用户界面。

另一方面,整个加载项可以很简单,功能代码完全包含在bootstrap.js文件中。一个例子是我写的一个名为Print Button is Print的扩展。该扩展仅更改Firefox打印按钮以导致打印(旧的默认值)而不是打印预览(从FF29开始的新默认值)。鉴于附加组件的简单性,除了bootstrap.js中包含的代码之外,不需要任何代码。

至于如何确切地将bootstrap.js中的信息传递给其他文件中的函数,这取决于您如何组织代码以及传递的数据类型或数量。传递数据可以通过许多不同的方法完成,从将数据作为参数传递给函数(例如function foo(data){...}),将数据分配给在另一个文件中定义的变量,将数据存储在首选项中,创建一个外部JSON文件,该文件由附加组件的不同部分读入,等等。