在Mozilla附加SDK中使用第三方JS库

时间:2011-09-13 17:04:48

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

我正在开始一个新项目(Firefox附加组件),我想尝试使用行为驱动的开发。我特别喜欢Jasmine BDD库。但是,我找不到如何在Add-On SDK中使用Jasmine等框架的好方法。

一个问题是Jasmine需要在全局对象上指定setTimeout(和类似)函数,而Add-On SDK使用“timers”模块导出那些函数。但是,让我说我调整Jasmine来从“定时器”中获取这些对象(或者将定时器导出的方法添加到全局对象中)。

更大的问题是我不知道如何实际运行测试。有一个由SDK生成的测试目录,但是,没有窗口或文档对象可以让我看到输出(我真的很想看到奇特的HTML输出)。我想我可以创建一个修改页面的内容脚本,但后来我无法访问(测试)后台脚本。

你以前见过这个吗?有没有推荐的方法如何处理?

谢谢! 托马斯

1 个答案:

答案 0 :(得分:0)

您可以使用Add-on SDK windows API打开一个新窗口来运行您的测试。您应该能够使用subscript loader加载Jasmine脚本,并将窗口和文档设置为您的任何内容想要在下标范围内:

var windows = require("windows").browserWindows;

windows.open({
  url: "about:blank",
  onOpen: function(window) {
    var script;
      var scriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"].
        getService(Ci.mozIJSSubScriptLoader);
      scriptLoader.loadSubScript(subscriptSpec, script);
      script["window"] = window;
      script["document"] = window.document;
      // ... run your tests here by calling script.someFunc() ...
   }
});

更新:进一步的研究表明,browserWindows实际上是特殊的包装器,不允许您访问内容窗口。您可以尝试从hidden frame获取窗口/文档。这是我可以看到从特权代码访问HTML文档的唯一方法。