0

我试图为 firefox 做一个扩展,我需要使用 timbre.js(http://mohayonao.github.io/timbre.js/),所以我想将它包含在 contentScriptFile 中并在测试中使用它。 js文件是这样的:

exports.main = function() {
    var widget = new Widget({
        id: "widget",
        label: "Label",
        contentURL: "cat.png",
        contentScriptFile: [data.url('timbre.js'), data.url('test.js')]      
    });

问题是它不会因为这个加载:

时间戳:16. 07. 13 12:35:33 错误:addon_name:发生异常。NS_ERROR_FAILURE:失败回溯(最近一次调用最后一次):文件“resource://gre/modules/commonjs/sdk/content/symbiont.js”,第 172 行,在 _onReady self._onInit(); 文件“resource://gre/modules/commonjs/sdk/widget.js”,第 803 行,null this._initSymbiont(); 文件“resource://gre/modules/commonjs/sdk/content/symbiont.js”,第 200 行,在 Symbiont<._onInit this._initWorker({ window: this._frame.contentWindow }); 文件“resource://gre/modules/commonjs/sdk/content/worker.js”,第 510 行,在 Worker 中 this._contentWorker = WorkerSandbox(this); 文件“resource://gre/modules/commonjs/sdk/deprecated/traits.js”,第 114 行,在 Trait return self.constructor.apply(self, arguments) || self._public; 文件“resource://gre/modules/commonjs/sdk/content/worker.js”,第 302 行,在 WorkerSandbox 中 this._importScripts.apply(this, contentScriptFile); _importScripts load(this._sandbox, String(uri)) 中的文件“resource://gre/modules/commonjs/sdk/content/worker.js”,第 361 行;文件“resource://gre/modules/commonjs/sdk/loader/sandbox.js”,第 47 行,加载返回 scriptLoader.loadSubScript(uri, sandbox, 'UTF-8'); 文件“resource://jid0-gb1orekgm6ay3hjawryzhdrneug-at-jetpack/synesthesia/data/timbre.js”,第 1 行,在 null (function(t){"use strict";function e(){function e(t){ for(var e,i=Array(t.byteLength),s=t.BYTES_PER_ELEMENT,n=0,r=i.length;r>n;++n)e=8*(n%s),i[ n]=( [...] 在 WorkerSandbox 中 this._importScripts.apply(this, contentScriptFile); _importScripts load(this._sandbox, String(uri)) 中的文件“resource://gre/modules/commonjs/sdk/content/worker.js”,第 361 行;文件“resource://gre/modules/commonjs/sdk/loader/sandbox.js”,第 47 行,加载返回 scriptLoader.loadSubScript(uri, sandbox, 'UTF-8'); 文件“resource://jid0-gb1orekgm6ay3hjawryzhdrneug-at-jetpack/synesthesia/data/timbre.js”,第 1 行,在 null (function(t){"use strict";function e(){function e(t){ for(var e,i=Array(t.byteLength),s=t.BYTES_PER_ELEMENT,n=0,r=i.length;r>n;++n)e=8*(n%s),i[ n]=( [...] 在 WorkerSandbox 中 this._importScripts.apply(this, contentScriptFile); _importScripts load(this._sandbox, String(uri)) 中的文件“resource://gre/modules/commonjs/sdk/content/worker.js”,第 361 行;文件“resource://gre/modules/commonjs/sdk/loader/sandbox.js”,第 47 行,加载返回 scriptLoader.loadSubScript(uri, sandbox, 'UTF-8'); 文件“resource://jid0-gb1orekgm6ay3hjawryzhdrneug-at-jetpack/synesthesia/data/timbre.js”,第 1 行,在 null (function(t){"use strict";function e(){function e(t){ for(var e,i=Array(t.byteLength),s=t.BYTES_PER_ELEMENT,n=0,r=i.length;r>n;++n)e=8*(n%s),i[ n]=( [...] 在 _importScripts 加载(this._sandbox, String(uri)); 文件“resource://gre/modules/commonjs/sdk/loader/sandbox.js”,第 47 行,加载返回 scriptLoader.loadSubScript(uri, sandbox, 'UTF-8'); 文件“resource://jid0-gb1orekgm6ay3hjawryzhdrneug-at-jetpack/synesthesia/data/timbre.js”,第 1 行,在 null (function(t){"use strict";function e(){function e(t){ for(var e,i=Array(t.byteLength),s=t.BYTES_PER_ELEMENT,n=0,r=i.length;r>n;++n)e=8*(n%s),i[ n]=( [...] 在 _importScripts 加载(this._sandbox, String(uri)); 文件“resource://gre/modules/commonjs/sdk/loader/sandbox.js”,第 47 行,加载返回 scriptLoader.loadSubScript(uri, sandbox, 'UTF-8'); 文件“resource://jid0-gb1orekgm6ay3hjawryzhdrneug-at-jetpack/synesthesia/data/timbre.js”,第 1 行,在 null (function(t){"use strict";function e(){function e(t){ for(var e,i=Array(t.byteLength),s=t.BYTES_PER_ELEMENT,n=0,r=i.length;r>n;++n)e=8*(n%s),i[ n]=( [...]

甚至尝试使用 require() 导入它,但它不起作用。我应该如何导入它?谢谢再见!

4

1 回答 1

0

根据文档,没有contentScriptFilefor Widget。还有一个问题是如何创建Widget. 它应该是这样的,你不应该使用new关键字:

const widgets = require("sdk/widget");
const data = require("sdk/self").data;

var player = widgets.Widget({
  id: "widget",
  label: "Label",
  contentURL: data.url("cat.png")
});

我不确定您要在这里实现什么。如果您只是想在页面中执行脚本,您的解决方案是 aPageMod而不是Widget。如果您想使用timbre.js. 解决方案是:

  • 用于PageMod内容脚本。
  • 用于Widget菜单。
  • 使用插件代码和内容脚本之间的通信机制( ) 来发送消息port
于 2013-07-19T04:00:55.187 回答