火狐浏览器是如何工作的?源代码分析?

42

我想学习FireFox的内部工作原理,想要了解源代码和不同的组件,但是代码库非常庞大,不知道从哪里开始。

我想知道是否有任何来自Firefox团队或社区外部的指南。

我已经稍微看了一下:https://developer.mozilla.org/En,但我没有找到什么明确的“从这里开始”的东西。我只是试图因[自我]教育的目的而查看他们的代码库。

5个回答

36

多伦多的塞内卡学院开设了一个针对初学者的Mozilla开发项目。

以下是一些相关链接:

真实世界的Mozilla

2008秋季周计划表

如果你想要深入学习,可以尝试以下实验室:

实验室:学习协作开发(2008秋季)

实验室:构建开源项目(2008秋季)

实验室:真实世界的Mozilla - 源代码阅读

实验室:使用补丁(2008秋季)

实验室:深入了解Mozilla - 调试Mozilla

实验室:修复Thunderbird中的漏洞

实验室:修改浏览器

实验室:使用扩展程序修改Firefox

实验室:现实世界的Mozilla - 第一个XPCOM组件

实验室:现实世界的Mozilla - 将Chrome添加到第一个XPCOM组件中

如果需要帮助,请使用IRC:irc.mozilla.org上的#seneca频道。不要担心您不是(Seneca)学生,世界各地的许多人(来自Seneca、Mozilla和其他机构的人)都在这个频道里,目的是教育开发人员有关开源的知识,特别是Mozilla项目。

祝你好运!


XPCOM的解释非常好,至少我希望一周前就知道它! - Ray2k
这些链接还有效吗?那里似乎再也没有任何内容了。 - SasQ

30
这是一个自上而下的答案(其他大多数是自下而上):
Firefox是一个XUL应用程序(参见:XUL);XUL是一种XML变体,用于描述由渲染器解释的GUI,就像HTML在浏览器中呈现一样,但是XUL包括浏览器的菜单、按钮、状态栏、键盘快捷键等。它非常棒;我已经能够比其他框架更快地使用XUL组合一些简单的GUI应用程序(而且它是跨平台的!)。
如果您查看Firefox应用程序目录(无论您在系统上安装它的位置如何),您将看到一个名为“chrome”的目录,其中包含一堆.jar文件。这些只是具有特定结构(包括清单)的.zip文件,您可以自行查看它们。
实际上,Firefox浏览器的很多部分都是XUL + Javascript。它确实利用了许多用C++编写的低级库,并通过XPCOM使Javascript可以访问它们,但是如果您想要理解(和修改)更高级别的行为,则XUL + Javascript部分可能是开始的地方。
编辑:附带一些XUL的教程/参考资料:1 2以及O'Reilly书籍

编辑:XUL文档与HTML文档非常相似(只是更加如此!)在与用户交互和事件方面。有一个文档模型用于动态修改 XUL,还有事件模型具有事件侦听器。两者的行为都像HTML + DOM +其事件模型一样,但具有更丰富的内置对象/接口/事件等。事件处理程序是特定类型的接口,并且可以由Javascript对象实现(在XUL中声明为onclick="blah()"或通过Javascript调用addEventListener()动态添加 - 在Firefox中与HTML事件完全相同的语法),也可以由C++或其他可以实现具有适当接口的XPCOM对象的语言实现。


我在维基百科上读到它使用了XUL。我没有意识到它使用了这么多,所以感谢您提供的详细信息。XUL很像微软的XAML,因此这个概念对我来说很容易理解。问题在于所有东西是如何组合在一起的——XUL如何调用一个动作,这个动作(事件处理)是C++还是JavaScript。 - Frank V
XUL如何调用一个动作,这个动作是使用C++还是JavaScript来处理的? - Jason S
当前的最佳答案很有信息量,但远不如这个答案时下流行。已点赞。 - JasonSmith

5

一种开始的方法是查看Firefox中最近修复的一些错误(请参见Bugzilla),并查看它们是如何被修复的。

话虽如此,Firefox的代码库非常庞大,可能没有一个人能够完全理解它,因此最好从一个小部分(比如收藏夹)开始,尝试找到相关代码并查看其工作原理。同样,解决的错误和它们影响的文件将是识别一些相关代码的好方法。


2
我曾与Mozilla代码(具体来说是mozilla/nss/security)一起工作。就我对Mozilla的了解而言:
它遵循分层架构,底层为NSPR层(Netscape Portable Runtime),该层与操作系统交互。
https://developer.mozilla.org/En/Download_Mozilla_Source_Code获取源代码,并在您的工作环境中构建它(据我所知,它支持各种平台/架构)。
加入Mozilla开发者社区/尝试通过测试某些组件来提供帮助。
要为Mozilla编写代码,请查看:http://www.mozilla.org/hacking/(如果您是C++程序员,则必须遵循C++可移植性标准)。
希望以上内容能帮助您入门。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接