我写了一个Firefox附加组件,可以很好地作为叠加层,但现在我将它转换为boostrapped(无重启)。它会注册一个选项卡侦听器,然后在关闭选项卡的某些情况下打开HTML5通知。
附加调试器告诉我Notification类是未定义的:
ReferenceError:未定义通知
根据Mozilla文档,不需要包含特殊的JSM来使用通知。知道问题是什么,更重要的是,如何解决它?
答案 0 :(得分:1)
根据Mozilla文档,不需要包含特殊的JSM来使用通知。
这仅适用于全局对象是DOM窗口的javascript上下文。 Bootstrapped插件run in a sandbox,仅定义了ecmascript定义的对象(Object
,Promise
,...),Components
和a few others。
检查调试器以查看该范围内的确切内容。
因此,如果您想使用HTML5 API或导入具有类似功能的其他服务,您需要检索窗口对象(xul窗口也应该工作),例如alertservice
答案 1 :(得分:0)
作为the8472 has stated,引导加载项不会自动访问全局window
对象。这与运行大多数JavaScript的上下文有很大不同。它吸引了相当多的人。还应注意bootstrap.js
中的代码可能在没有窗口时运行,因此您无法获得。
如果存在浏览器窗口,您可以通过以下方式获取对最新浏览器window
,document
和gBrowser
的引用:
if (window === null || typeof window !== "object") {
//If you do not already have a window reference, you need to obtain one:
// Add a "/" to un-comment the code appropriate for your add-on type.
/* Add-on SDK:
var window = require('sdk/window/utils').getMostRecentBrowserWindow();
//*/
//* Overlay and bootstrap (from almost any context/scope):
var window=Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator)
.getMostRecentWindow("navigator:browser");
//*/
}
if (typeof document === "undefined") {
//If there is no document defined, get it
var document = window.content.document;
}
if (typeof gBrowser === "undefined") {
//If there is no gBrowser defined, get it
var gBrowser = window.gBrowser;
}