这里是关于扩展开发中最常见问题的解答集锦。其中的绝大多数是关于 FireFox 的,但是大部分能够方便的移植到 SeaMonkey,Thunderbird 或其它 Mozilla 应用上。
如果你还不知道怎么开始,可以先看看我们的教程:构建一个扩展或者 MozillaZine 上的新手教程。然后用扩展向导创建一个供开始用的简单扩展。
不要忘记先设置好扩展的开发环境。
调试
调试之前先设置扩展的开发环境。
如果调试的代码很复杂,可能会用到 Venkman JavaScript 调试器。在用 Venkman 调试扩展代码之前需要把 "Debug -> Exclude Browser Files" 选项勾掉。
怎样记录代码中的错误?
将javascript.options.showInConsole 设为 true,这样错误就会被记录在错误控制台中,使得 bug 容易追踪些。
怎样显示扩展当前状态?
要想显示变量值,调试消息等,可以使用 alert(),dump() ,Components.utils.reportError() 或者控制台服务。当然也可以用 Venkman 调试器。
为什么我的脚本不能正确运行?
如果你的脚本不能如预期运行,第一个要检查的是错误控制台(参见#)。
访问尚未加载完毕的 DOM 也常常是错误的来源。这种错误通常是因为初始化代码被放在程序顶层(即所有函数之外)。通过监听 load 事件延期执行初始化代码可以解决这个问题(load 事件表示窗口已经加载完毕):
function exampleBrowserStartup(event) { // 初始化代码 } window.addEventListener("load", exampleBrowserStartup, false);
不能访问网页的文档(document)对象
要从 browser.xul 这个 overlay 中访问当前网页,应当使用 content.document 而不是 document。这是因为 document 表示浏览器窗口自身。更多信息参考 Working with windows in chrome code。
无法在扩展中使用 XMLHttpRequest
使用 XMLHttpRequest 发送接收信息时,一般都需要做跨域(crosss domain)操作。 一般来说跨域很麻烦,但因为在 chrome 窗口内发起请求时,是在安全区域内的,所以请求会被默许。
You need to make sure that you are initializing the cross domain XMLHttpRequest from JavaScript code that is referencing a XUL window. If you try and execute the request in relation to the browser content document, as opposed to the "document" of the XUL window, you will receive a Permission Denied error.
XML 文件是规范的,但是却出现 XML 解析错误!
示例代码
得到更多帮助