2

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

4

2 回答 2

2

使用hiddenDOMwindow

Cu.import("resource://gre/modules/Services.jsm");
var doc = Services.appShell.hiddenDOMWindow.document;
于 2013-08-05T20:23:45.610 回答
0

听起来您可能没有正确地将内容脚本附加到工作页面。确保您使用 tabs.attach() 之类的东西将一个或多个内容脚本附加到工作页面(请参阅此处的文档)。

否则你可能需要等待 DOM 加载,等待整个页面加载

window.onload = function ()
{
Javascript code goes here
}

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

于 2013-08-05T18:11:50.703 回答