调试Firefox扩展-如何查看XPI中包含的所有JS和XUL文件?

李爱文

我正在尝试使用Firefox 28.0调试Firefox扩展。

我已经按照https://developer.mozilla.org/zh-CN/Add-ons/Setting_up_extension_development_environment中的建议设置了开发环境(实际上,我只是采取了懒惰的方式并安装了DevPrefs扩展,以设置有关以下各项的所有必要信息:配置)

然后,我打开Firefox并进入调试环境(“工具”>“ Web开发器”>“浏览器工具箱”)。

然后,我转到“调试器”选项卡。

但是,在“源”窗格的扩展名(例如chrome:// myextension)下,我仅看到扩展名XPI中包含的一些JS和XUL文件。

如何在调试器中手动“加载文件”,以便设置断点并跟踪扩展的运行时?

弗拉基米尔·帕兰特

调试器没有任何允许“手动”加载文件的功能,而是向您显示JavaScript引擎当前加载的每个文件。如果深入研究细节,这意味着每当JavaScript引擎编译新脚本时,调试器都会收到通知,并将相应的文件添加到其列表中。因此,通常您需要做的就是打开一个使用该脚本的页面或对话框,它将在调试器中可见。我说“正常”是因为在我的测试中这似乎无法可靠地工作-似乎存在一些错误,使调试器错过了一些脚本,也许正是这提示了您的问题。

现在,您当然可以考虑伪造通知,以强制调试器加载特定文件-例如,如果要在实际加载文件之前设置断点。我尝试过它,的确是有可能的,但是它要求您弄乱Firefox内部结构,并且它依赖于许多实现细节,这些细节可能在将来的Firefox版本中发生变化。特别是,您需要获取DebuggerServer用于与调试器通信实例。尽管进程内调试器始终使用相同的实例,但该实例很简单,但为每个远程调试器创建了一个新实例。据我所知,只有通过错误993029实现的更改才能进入该实例,这意味着它仅适用于Firefox 32(当前可从Firefox Aurora渠道获得)) 以上。

问题在于DebuggerServer实例是由ToolboxProcess.jsm中BrowserToolboxProcess声明创建的在错误993029引入更改之前,将创建一个对象,并且不保留对其的引用-这意味着事后将无法访问该对象和相应的连接。从Firefox 32开始,所有创建的对象都存储在集合中,并且可以枚举。BrowserToolboxProcessBrowserToolboxProcessprocesses

此代码可用于伪造Debugger.onNewScript()调用,该调用将转发给远程调试器:

(function()
{
  // Iterate over existing processes
  const {processes} = Cu.import("resource:///modules/devtools/ToolboxProcess.jsm", null);
  for (var process of processes)
  {
    // Iterate over connections associated with each process
    var debuggerServer = process.debuggerServer;
    for (var connID in debuggerServer._connections)
    {
      if (!debuggerServer._connections.hasOwnProperty(connID))
        continue;
      var conn = debuggerServer._connections[connID];

      // Get ChromeDebuggerActor instance for the connection
      var chromeDebugger = conn._getOrCreateActor(conn.rootActor._extraActors.chromeDebugger.actorID);

      // Fake new script call
      chromeDebugger.onNewScript({
        url: "chrome://myextension/content/script.js", // CHANGE THAT LINE
        source: {text:""},
        getChildScripts: () => []
      });
    }
  }
})();

如上所述,此代码仅应从Firefox 32开始运行,我在Firefox 33.0a1上对其进行了测试。您可以从Scratchpad运行它,确保将环境切换到“ Browser”不能保证它将在将来的Firefox版本中继续使用,这里使用的一些实现细节可以随时更改。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

cfx运行后如何调试firefox扩展?

来自分类Dev

如何使用Chromebug调试Firefox扩展?

来自分类Dev

如何调试main.js插件,而不仅仅是Firefox扩展的内容脚本?

来自分类Dev

如何调试main.js插件,而不仅仅是Firefox扩展的内容脚本?

来自分类Dev

删除调试版本时,如何防止Firefox删除扩展程序的数据?

来自分类Dev

重新打包和/或修改现有的Firefox扩展XPI

来自分类Dev

重新打包和/或修改现有的Firefox扩展XPI

来自分类Dev

如何查看所有已安装的Firefox扩展的列表并导出?

来自分类Dev

如何调试Siri(意图)扩展?

来自分类Dev

Firefox扩展main.js文件中的包含脚本

来自分类Dev

Firefox:如何调试SSL错误

来自分类Dev

Firefox中的调试弹出窗口

来自分类Dev

查看Firefox扩展-何时安装?

来自分类Dev

如何调试Chrome devtools面板扩展?

来自分类Dev

如何调试WebKit2GTK +扩展

来自分类Dev

调试扩展程序时如何打印变量?

来自分类Dev

如何将单个Firefox扩展导出为可安装的xpi文件?

来自分类Dev

如何将单个Firefox扩展(防病毒)导出为可安装的xpi文件?

来自分类Dev

如何处理 vscode 调试扩展中的循环和行?

来自分类Dev

如何使用Firefox调试器调试jQuery事件?

来自分类Dev

如何激活Firefox调试器?

来自分类Dev

如何激活Firefox调试器?

来自分类Dev

在Firefox扩展中加载多个JS文件

来自分类Dev

如何查看/扩展变量中返回的所有值?

来自分类Dev

在firefox扩展中读取本地json文件

来自分类Dev

如何使用Firefox Developer Edition和jpm运行Firefox扩展?

来自分类Dev

从我的Firefox扩展目录加载HTML文件

来自分类Dev

如何在Firefox OS设备上调试JavaScript文件

来自分类Dev

从 Firefox 和 Safari 扩展使用 Firebase

Related 相关文章

  1. 1

    cfx运行后如何调试firefox扩展?

  2. 2

    如何使用Chromebug调试Firefox扩展?

  3. 3

    如何调试main.js插件,而不仅仅是Firefox扩展的内容脚本?

  4. 4

    如何调试main.js插件,而不仅仅是Firefox扩展的内容脚本?

  5. 5

    删除调试版本时,如何防止Firefox删除扩展程序的数据?

  6. 6

    重新打包和/或修改现有的Firefox扩展XPI

  7. 7

    重新打包和/或修改现有的Firefox扩展XPI

  8. 8

    如何查看所有已安装的Firefox扩展的列表并导出?

  9. 9

    如何调试Siri(意图)扩展?

  10. 10

    Firefox扩展main.js文件中的包含脚本

  11. 11

    Firefox:如何调试SSL错误

  12. 12

    Firefox中的调试弹出窗口

  13. 13

    查看Firefox扩展-何时安装?

  14. 14

    如何调试Chrome devtools面板扩展?

  15. 15

    如何调试WebKit2GTK +扩展

  16. 16

    调试扩展程序时如何打印变量?

  17. 17

    如何将单个Firefox扩展导出为可安装的xpi文件?

  18. 18

    如何将单个Firefox扩展(防病毒)导出为可安装的xpi文件?

  19. 19

    如何处理 vscode 调试扩展中的循环和行?

  20. 20

    如何使用Firefox调试器调试jQuery事件?

  21. 21

    如何激活Firefox调试器?

  22. 22

    如何激活Firefox调试器?

  23. 23

    在Firefox扩展中加载多个JS文件

  24. 24

    如何查看/扩展变量中返回的所有值?

  25. 25

    在firefox扩展中读取本地json文件

  26. 26

    如何使用Firefox Developer Edition和jpm运行Firefox扩展?

  27. 27

    从我的Firefox扩展目录加载HTML文件

  28. 28

    如何在Firefox OS设备上调试JavaScript文件

  29. 29

    从 Firefox 和 Safari 扩展使用 Firebase

热门标签

归档