阅读:14486回复:16
让Firefox支持双击tab关闭页面
感谢二楼三楼两位老狐狸指点,小弟我使用Firefox多年了,探其究竟才刚刚开始,多多指教。另外,不用TMP是我说明的情况,只想试试修改Firefox。
本文内容基于Firefox3.0.5版本。更多内容请到我的Blog浏览,http://www.chixiang.org 如果你习惯使用双击标签来关闭页面的功能,比如像遨游浏览器那样,那么你一定会为Firefox不支持这样的功能而感到惋惜。有些人可能会想,那有什么,依靠Firefox强大的扩展功能这还不是小菜一碟。没错,Firefox有很多扩展能够实现这个功能。 今天我要给大家介绍一个比较另类的方法,自己修改Firefox,以实现双击标签关闭页面。这篇文章的目的不在于教会大家仅仅为了实现这么一个小功能而大动干戈,而在于抛砖引玉,自己探索Firefox的强大之处。 browser.jar探索 首先来到Firefox的安装目录,简单起见,这里假设安装在C:\firefox目录。再进入chrome目录,会发现两个文件:browser.jar和browser.manifest,我们就要从这两个文件动手。打开browser.manifest文件,他的内容可能如下: content branding jar:browser.jar!/content/branding/ xpcnativewrappers=yes override chrome://global/content/license.html chrome://browser/content/license.html style chrome://global/content/customizeToolbar.xul chrome://browser/content/browser.css overlay chrome://global/content/viewPartialSource.xul chrome://browser/content/viewSourceOverlay.xul overlay chrome://global/content/viewSource.xul chrome://browser/content/viewSourceOverlay.xul style chrome://global/content/customizeToolbar.xul chrome://browser/skin/ content browser jar:browser.jar!/content/browser/ xpcnativewrappers=yes contentaccessible=yes overlay chrome://browser/content/browser.xul chrome://browser/content/safebrowsing/report-phishing-overlay.xul 注意这么一行: content browser jar:browser.jar!/content/browser/ xpcnativewrappers=yes contentaccessible=yes 这一行指定了Firefox启动时会引用browser.jar这个JAR包,我们如何方便的修改它里面的内容呢,我可不想每次修改其中的内容后再将它打成JAR包,太麻烦了。其实,manifest文件同样也可以指定引用的目录。于是,我们将browser.jar包解压到browser目录中,再将这一行改成: content browser file:browser/content/browser/ xpcnativewrappers=yes contentaccessible=yes 这样就可以随时修改browser目录中的内容了。 修改tabbrowser.xml文件 来到目录C:\firefox\chrome\browser\content\browser\中,找到tabbrowser.xml文件,用文本编辑器打开,定位onTabBarDblClick方法的定义,初始的代码如下: <method name="onTabBarDblClick"> <parameter name="aEvent"/> <body> <![CDATA[ // See hack note in the tabbrowser-close-button binding if (!this._blockDblClick && aEvent.button == 0 && aEvent.originalTarget.localName == "box") { // xxx this needs to check that we're in the empty area of the tabstrip var e = document.createEvent("Events"); e.initEvent("NewTab", true, true); this.dispatchEvent(e); } ]]> </body> </method> 仔细阅读这段代码,发现它描述的内容是这样:if 在tab栏上双击鼠标,将会新建一个标签页,else呢?它没说。哈哈,那就让我们自己来定义。这里的else包含了在标签上双击的情况,这好办了,只要增加else事件,并将它定义为关闭当前页面就可以了: else { this.removeTab(this.mCurrentTab); } 保存tabbrowser.xml,重新打开Firefox浏览器,然后在标签上双击鼠标试试,是不是关闭了? |
|
|
1楼#
发布于:2009-01-18 16:30
楼主又有知识又有能力又有见地,真是不可多得的人才!
但是对于firefox,您还是门外汉。 推广自己的博客心情急切,可以谅解。 1插件功能? 2改tabbrowser.xm叫“改源代码”? 本来是tmp就可以解决的东西,非要舍近求远。若让小菜菜们看见了流毒无穷呀。 |
|
|
2楼#
发布于:2009-01-18 16:30
楼主是搞 web 开发的啊,技术性人才,虽然我不搞开发的,但是我欣赏这样的人!
不过正如2楼所说,对于 Firefox 来说你还是一个门外汉! 建议你看一下这个置顶贴,然后参照你的博客修改不恰当的用语: https://www.firefox.net.cn/newforum/view ... hp?t=25314 |
|
|
3楼#
发布于:2009-01-18 16:30
呵呵,我觉得挺好的,学一下找相关函数的办法^_^
|
|
4楼#
发布于:2009-01-18 16:30
fang5566:楼主是搞 web 开发的啊,技术性人才,虽然我不搞开发的,但是我欣赏这样的人! 本人不是搞web开发的,凭着对Firefox的兴趣研究研究,多谢指教。 |
|
|
5楼#
发布于:2009-01-18 16:30
不要打击楼主么,楼主我支持你的
|
|
|
6楼#
发布于:2009-01-18 16:30
搞搞新思路~不错~
|
|
7楼#
发布于:2009-01-18 16:30
支持你,DIY人才,我觉得不算门外汉了,相当不错了,对firefox有一定的了解和研究。
|
|
8楼#
发布于:2009-01-18 16:30
|
|
|
9楼#
发布于:2009-01-18 16:30
这个xml当然是firefox的一部分,二楼的火星了吧?给你科普一下,Firefox的界面逻辑全部用javascript+xul+xbl写成,后台是C++的XPCOM,不要前台的这些“低级的“xml文件用户啥都看不到。
楼主这样的,认真钻研下去,再去bugzilla和mdc group上混一段时间,一年之后是有可能为Firefox贡献代码的。只满足于用扩展的,永远也只能是用户。 |
|
10楼#
发布于:2009-01-18 16:30
|
|
|
11楼#
发布于:2009-01-18 16:30
安装 userChromeJS 这个扩展,然后用一段 javascript 语句就可以解决了。自从用了 userChromeJS 这个扩展,就省了好多扩展。
附件的脚本,包含以下几个功能(每段功能都有说明,不要的功能删除就可以了): 1、双击鼠标左键关闭标签(空白处新开标签),单击中键关闭标签(空白处恢复标签) 2、鼠标移到标签上延时500ms后自动激活标签 3、标签邮件菜单中增加“最近关闭的标签页” 4、最后一个标签关闭时,不关闭 firefox(针对firefox 3.1) 5、阻止拖拉标签时新开窗口的功能(针对firefox 3.1) |
|
|
12楼#
发布于:2009-01-18 16:30
|
|
|
13楼#
发布于:2009-01-18 16:30
不赞成直接修改 firefox 本身的代码,一旦 firefox 升级,就得重新修改 firefox 本身的代码,费时费力,而且下次修改时可能有遗漏。
|
|
14楼#
发布于:2009-01-18 16:30
|
|
|
上一页
下一页