我正在构建Firefox扩展,它可以创建单个XMPP聊天连接,可以从所有选项卡和窗口访问,所以我想,只有这样,才能在javascript模块中创建连接并将其包含在每个浏览器中窗口。如果我错了,请纠正我......
编辑:我正在使用xul叠加层构建传统扩展,而不是使用sdk,并讨论这些模块:https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules
所以我将Strophe.js复制到了js模块中。 Strophe.js使用这样的代码:
/*_Private_ function that creates a dummy XML DOM document to serve as
* an element and text node generator.
*/
[---]
if (document.implementation.createDocument === undefined) {
doc = this._getIEXmlDom();
doc.appendChild(doc.createElement('strophe'));
} else {
doc = document.implementation
.createDocument('jabber:client', 'strophe', null);
}
以后使用doc.createElement()创建xml(或html?)节点。
一切正常,但在模块中我收到错误“错误:ReferenceError:文档未定义”。 如何解决这个问题?
(更准确的代码:http://pastebin.com/R64gYiKC)
答案 0 :(得分:2)
Cu.import("resource://gre/modules/Services.jsm");
var doc = Services.appShell.hiddenDOMWindow.document;
答案 1 :(得分:0)
听起来您可能无法将内容脚本正确附加到工作页面。确保使用tabs.attach()之类的东西将一个或多个内容脚本附加到工作页面(请参阅文档here)。
否则您可能需要等待DOM加载,等待整个页面加载
window.onload = function ()
{
Javascript code goes here
}
至少应该诊断出这个问题(即使以上不是生产中使用的最佳方法)。但如果我不得不下注,我会说你没有附上内容脚本。