1

我正在使用AngularJS开发一个 Firefox 扩展,并且我正在尝试在我的 main.js 文件中使用一些 AngularJS 服务。我require()用来包含相关模块并angular.bootstrap()初始化模块。

但是,我总是收到以下错误:

参考错误:未定义窗口

我还能做些什么吗?

4

4 回答 4

1

AngularJS 并不真正适用于这种环境 - 它是一个 MVC 框架,在您的情况下 V(视图)缺失。你没有告诉你想用 AngularJS 做什么,但你可能想考虑在你的内容脚本中使用它,而不是main.js.

也就是说,AngularJS 通常window只是简单地用作访问全局对象的一种方式。这很容易修复,AngularJS 源代码的倒数第二行说:

})(window, document);

这应该改为:

})(this, document);

这至少会允许那些不需要视图的功能继续进行。当然,您仍然需要删除最后一行(试图将样式表插入文档的行)并导出angular变量:

exports.angular = angular;
于 2012-09-14T06:37:08.390 回答
1

没有太多细节,所以我不确定这个建议是否符合你想要做的。如果您想使用一些需要 DOM 并且不想向用户显示文档的 JS 库,请考虑使用 page-worker 模块:

https://addons.mozilla.org/en-US/developers/docs/sdk/latest/packages/addon-kit/page-worker.html

您需要在 worker 和 main.js 之间设置事件驱动的通信,就像 SDK 代码使用的任何其他内容文档一样:

https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/guides/events.html

于 2012-09-14T19:12:19.703 回答
0

您要更新的观点是什么?您应该能够提供angular.bootstrap一些非根元素来开始编译。http://docs.angularjs.org/api/angular.bootstrap

如果您正在使用一些依赖于窗口的服务,您可能还需要提供自己的调整$window服务。http://docs.angularjs.org/api/ng.$window

于 2012-09-14T07:00:28.787 回答
0

可能您必须通过获取窗口对象 var window = require("window-utils").activeBrowserWindow;

于 2012-09-13T22:19:07.890 回答