我正在使用AngularJS开发Firefox扩展,我正在尝试使用main.js文件中的一些AngularJS服务。我使用require()
包含相关模块,并使用angular.bootstrap()
初始化模块。
但是,我总是收到以下错误:
参考错误:窗口未定义
我能做些什么吗?
答案 0 :(得分:1)
AngularJS并不是真正意味着这种环境 - 它是一个MVC框架,在你的情况下,V(视图)缺失。您没有说出要使用AngularJS的内容,但您可能需要考虑在内容脚本而不是main.js
中使用它。
也就是说,AngularJS经常使用window
作为访问全局对象的手段。这很容易修复,AngularJS源代码的倒数第二行说:
})(window, document);
这应该改为:
})(this, document);
这至少会允许进行不需要视图的功能。当然,您仍然需要删除最后一行(尝试将样式表插入文档的那一行)并导出angular
变量:
exports.angular = angular;
答案 1 :(得分: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
答案 2 :(得分:0)
可能是你必须得到窗口对象
var window = require("window-utils").activeBrowserWindow;
?
答案 3 :(得分:0)
您尝试更新的视图是什么?您应该能够为angular.bootstrap
提供一些非根元素以开始编译。 http://docs.angularjs.org/api/angular.bootstrap
如果您使用的某些服务依赖于窗口,您可能还需要提供自己的调整$window
服务。 http://docs.angularjs.org/api/ng.$window