在firefox插件

时间:2016-01-23 19:35:59

标签: javascript firefox firefox-addon firefox-addon-sdk

我维护了一个使用附加SDK(基于jpm工具)开发的Firefox附加组件。它使用两个内容脚本:一个用于将外部库(highlight.js)注入页面,另一个用于从第一个脚本调用函数。

+--------------------------------------------+
|                Add-on script               |
+--------------------------------------------+
            |                    |
+-----------|--------------------|-----------+
| +---------V--------+  +--------V---------+ |
| | highlight.min.js |  | enlightscript.js | |
| |                  |  |                  | |
| |      hljs.func() <--- calling          | |
| +------------------+  +------------------+ |
|                                   web page |
+--------------------------------------------+

直到最近,我没有遇到任何问题:我可以从附加脚本中注入两个内容脚本(完整代码here):

...
contentScriptFile: [
  self.data.url(script_dir + "/highlight.min.js"),
  self.data.url("enlightscript.js")
]
...

调用附加到第二个脚本(代码here)内第一个脚本中定义的对象的函数:

// defined in highlight.min.js, called from enlightscript.js
hljs.initHighlighting();

这是可能的,因为window.hljs对象在第一个脚本中定义如下:

// definition in highlight.min.js
window.hljs = some_function_definition();

但是这个图书馆正在不断发展,在最近的commit中,这个定义变成了:

// new definition in highlight.min.js
// (it is supposed to be called either in the global namespace,
// in which case self is equivalent to window, or from within a
// worker)
self.hljs = some_function_definition();

在我的情况下,self对象不引用window,我不能再直接调用该函数。到目前为止,我还没有找到任何有效的解决方案。

请注意,我绝对不能编辑highlight.min.js脚本(因此我无法恢复修改或更改其调用方式)。

有人知道是否可以从第二个脚本(hljs.initHighlighting();)到达并调用enlightscript.js函数?

编辑:

我已经联系了库的开发人员,他们很友好地修改了他们的代码,所以我没有更多的问题来调用我的对象。我仍然会对答案感兴趣 - 记录。

0 个答案:

没有答案