【问题标题】:How to debug Firefox extension如何调试 Firefox 扩展
【发布时间】:2011-07-28 07:21:45
【问题描述】:

我最近从事火狐扩展开发,遇到了一些问题:

所以,我在 browser.xul 中定义了以下几行:

<overlay id="sample" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <script src="jquery.js" />
    <script src="global.js" />
</overlay>

所以,在 global.js 中,我可以访问所有 jQuery 的东西,并尝试在那里加载一个简单的脚本:

var inner = null;
var o = function () {
    var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
    return {
        init : function () {
            alert('here loading inner..');
            $.get('http://www.example.com/script.js', function(d) {
                alert('loaded inner script!');
                inner = d;
                gBrowser.addEventListener("load", function () {
                    alert('onload');
                }, false);
            }).error(function(e) { alert('error loading inner..'); setTimeout(o.init,1000); });
            $(this).ajaxError(function() { alert('ajaxError'); });
        }
    }
}
window.addEventListener("load", o.init, false);

但我也没有收到“加载的内部脚本”,也没有收到“错误加载内部”警报。而且我没有看到错误控制台记录扩展程序中的任何错误...我假设 $.get 是可能由于某些限制而静默失败,但是是否有适当的方法可以正常调试错误?扩展程序的错误控制台是静默的,它只显示来自网页的错误

【问题讨论】:

  • Alex,我真的希望你实际上并没有评估 XHR 作为脚本获得的结果,对吧?
  • 是的,但主要是因为插件是“可自动更新的” - 我知道这很糟糕,我在日常生活中从不这样做,但在这个特定的项目中,我不得不
  • 关键是如果你这样做,那么你就会在浏览器中引入一个安全漏洞。例如,在不受信任的 wifi 连接上使用此类浏览器的任何人都允许 wifi 路由器将任意脚本注入 chrome。至少在这里使用 SSL!
  • 我明白了,但这意味着即使来自 stackoverflow.com 的脚本也可以替换为任意脚本,因为它们也是在没有 ssl 的情况下加载的
  • 是的,大概 stackoverflow.com 的维护者并不关心随机 wifi 操作员是否可以运行随机脚本冒充 stackoverflow... 甚至冒充整个站点。如果他们这样做了,他们将在 SSL 上运行他们的网站。

标签: javascript firefox firefox-addon xul


【解决方案1】:

如果您查看文章 Setting up an extension development environment,它建议设置一些首选项,包括 javascript.options.showInConsole = true,它将 chrome 文件中的错误记录到错误控制台。

【讨论】:

  • 好的,现在会好很多,我会用 showInConsole 试试看它显示什么错误
  • 成功了!我的意思是它帮助了 :) 现在容易多了,我用原始 xmlhttprequest 替换了 $.get,它现在正在滚动 :) 谢谢 :)
  • 有什么方法可以通过断点进行调试吗?错误控制台就像吸毒的骡子一样有用。 (但是是的,总比没有好)
  • 从FF19开始就可以在浏览器chrome本身上使用内置的调试工具了,详情看这个答案:stackoverflow.com/questions/17547364/…
【解决方案2】:

一般来说,在 XUL 页面中使用 JQuery 可能会出现问题,因为它假定文档是 HTML DOM 而不是 XML DOM 并且 windowHTML 窗口而不是 XUL 窗口。如果我是你,我会为此使用subscript loader。要进行调试,您可以使用Venkman,尽管它有点古怪,我经常只使用dump() 语句来代替控制台。

更新:请参阅下面我对 Browser Toolbox 的评论。

【讨论】:

  • 似乎 loadSubScript 无法加载外部 url(“指向要加载的脚本的 URL。它必须是本地 chrome:, resource: or file: URL”),而我需要从 example.com/myscript.js.. 获取它。
  • Venkman 不如 Firefox 现在包含的内置浏览器调试器稳定/可用。
  • 是的,这整个问题现在已经过时了。你应该发布一个关于Browser Toolbox(以前的浏览器调试器)的新答案,我同意这是一项伟大的新创新(它已经存在不到一年,并且每个版本都变得更加稳定)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多