mozilla扩展js模块中的“文档”?

时间:2013-08-05 14:01:45

标签: firefox-addon mozilla javascript

我正在构建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

2 个答案:

答案 0 :(得分:2)

使用hiddenDOMwindow

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
}

至少应该诊断出这个问题(即使以上不是生产中使用的最佳方法)。但如果我不得不下注,我会说你没有附上内容脚本。