chixiang
小狐狸
小狐狸
  • UID27684
  • 注册日期2009-01-06
  • 最后登录2009-01-21
  • 发帖数4
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:13898回复:16

让Firefox支持双击tab关闭页面

楼主#
更多 发布于:2009-01-18 16:30
感谢二楼三楼两位老狐狸指点,小弟我使用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浏览器,然后在标签上双击鼠标试试,是不是关闭了?
我的博客: <!-- w --><a class="postlink" href="http://www.chixiang.org">www.chixiang.org</a><!-- w -->
taizitju
千年狐狸
千年狐狸
  • UID10093
  • 注册日期2005-11-27
  • 最后登录2012-04-12
  • 发帖数3638
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
1楼#
发布于:2009-01-18 16:30
楼主又有知识又有能力又有见地,真是不可多得的人才!
但是对于firefox,您还是门外汉。
推广自己的博客心情急切,可以谅解。

1插件功能?

2改tabbrowser.xm叫“改源代码”?

本来是tmp就可以解决的东西,非要舍近求远。若让小菜菜们看见了流毒无穷呀。
[color=orange][b]为新手服务[/b][/color]  [color=BLUE][b]快速解决问题传送门:[/b][/color][url=https://www.firefox.net.cn/newforum/viewtopic.php?t=22571][color=red][b]①Firefox初级教程(置顶帖)[/b][/color][/url]  [url=https://www.firefox.net.cn/newforum/viewtopic.php?t=27478][color=red][b]②孟婆汤(清空profile工具)[/b][/color][/url]  [url=https://www.firefox.net.cn/newforum/viewtopic.php?t=26765][color=red][b]③减肥茶(半淘汰)[/b][/color][/url]  [url=https://www.firefox.net.cn/newforum/search.php][color=red][b]④搜索论坛[/b][/color][/url]
fang5566
管理员
管理员
  • UID3719
  • 注册日期2005-03-07
  • 最后登录2024-05-09
  • 发帖数18483
  • 经验4837枚
  • 威望5点
  • 贡献值4316点
  • 好评度1116点
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 终身成就
2楼#
发布于:2009-01-18 16:30
楼主是搞 web 开发的啊,技术性人才,虽然我不搞开发的,但是我欣赏这样的人!

不过正如2楼所说,对于 Firefox 来说你还是一个门外汉!
建议你看一下这个置顶贴,然后参照你的博客修改不恰当的用语:
https://www.firefox.net.cn/newforum/view ... hp?t=25314
Firefox More than meets your experience
web123lai
千年狐狸
千年狐狸
  • UID8036
  • 注册日期2005-08-17
  • 最后登录2019-05-01
  • 发帖数4225
  • 经验13枚
  • 威望1点
  • 贡献值20点
  • 好评度10点
  • 社区居民
3楼#
发布于:2009-01-18 16:30
呵呵,我觉得挺好的,学一下找相关函数的办法^_^
chixiang
小狐狸
小狐狸
  • UID27684
  • 注册日期2009-01-06
  • 最后登录2009-01-21
  • 发帖数4
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
4楼#
发布于:2009-01-18 16:30
fang5566:楼主是搞 web 开发的啊,技术性人才,虽然我不搞开发的,但是我欣赏这样的人!

不过正如2楼所说,对于 Firefox 来说你还是一个门外汉!
建议你看一下这个置顶贴,然后参照你的博客修改不恰当的用语:
https://www.firefox.net.cn/newforum/view ... hp?t=25314
回到原帖


本人不是搞web开发的,凭着对Firefox的兴趣研究研究,多谢指教。
我的博客: <!-- w --><a class="postlink" href="http://www.chixiang.org">www.chixiang.org</a><!-- w -->
chicksong
火狐狸
火狐狸
  • UID20617
  • 注册日期2007-09-23
  • 最后登录2023-08-03
  • 发帖数268
  • 经验13枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
5楼#
发布于:2009-01-18 16:30
不要打击楼主么,楼主我支持你的
Firefox是头小狐狸,我养的……
hitsmaxft
非常火狐
非常火狐
  • UID25803
  • 注册日期2008-08-12
  • 最后登录2024-01-13
  • 发帖数740
  • 经验13枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
6楼#
发布于:2009-01-18 16:30
搞搞新思路~不错~

Lost in fx...
bigflybird
火狐狸
火狐狸
  • UID23032
  • 注册日期2008-02-24
  • 最后登录2011-08-01
  • 发帖数283
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
7楼#
发布于:2009-01-18 16:30
支持你,DIY人才,我觉得不算门外汉了,相当不错了,对firefox有一定的了解和研究。
chixiang
小狐狸
小狐狸
  • UID27684
  • 注册日期2009-01-06
  • 最后登录2009-01-21
  • 发帖数4
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
8楼#
发布于:2009-01-18 16:30
bigflybird:支持你,DIY人才,我觉得不算门外汉了,相当不错了,对firefox有一定的了解和研究。回到原帖


谈不上了解和研究,谢谢支持。
我的博客: <!-- w --><a class="postlink" href="http://www.chixiang.org">www.chixiang.org</a><!-- w -->
marffin
火狐狸
火狐狸
  • UID26524
  • 注册日期2008-10-04
  • 最后登录2012-10-17
  • 发帖数188
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
9楼#
发布于:2009-01-18 16:30
这个xml当然是firefox的一部分,二楼的火星了吧?给你科普一下,Firefox的界面逻辑全部用javascript+xul+xbl写成,后台是C++的XPCOM,不要前台的这些“低级的“xml文件用户啥都看不到。

楼主这样的,认真钻研下去,再去bugzilla和mdc group上混一段时间,一年之后是有可能为Firefox贡献代码的。只满足于用扩展的,永远也只能是用户。
taizitju
千年狐狸
千年狐狸
  • UID10093
  • 注册日期2005-11-27
  • 最后登录2012-04-12
  • 发帖数3638
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
10楼#
发布于:2009-01-18 16:30
marffin:这个xml当然是firefox的一部分,二楼的火星了吧?给你科普一下,Firefox的界面逻辑全部用javascript+xul+xbl写成,后台是C++的XPCOM,不要前台的这些“低级的“xml文件用户啥都看不到。

楼主这样的,认真钻研下去,再去bugzilla和mdc group上混一段时间,一年之后是有可能为Firefox贡献代码的。只满足于用扩展的,永远也只能是用户。
回到原帖


firefox 不是为了用户制作的软件么?

以下冲动了 就当我没说过好了

我有说过不要什么么?

我用得着你给我科普么?

自大加一点儿念什么,你认识么?

嗑瓜子嗑出来一个臭虫,你知道是什么意思么?
[color=orange][b]为新手服务[/b][/color]  [color=BLUE][b]快速解决问题传送门:[/b][/color][url=https://www.firefox.net.cn/newforum/viewtopic.php?t=22571][color=red][b]①Firefox初级教程(置顶帖)[/b][/color][/url]  [url=https://www.firefox.net.cn/newforum/viewtopic.php?t=27478][color=red][b]②孟婆汤(清空profile工具)[/b][/color][/url]  [url=https://www.firefox.net.cn/newforum/viewtopic.php?t=26765][color=red][b]③减肥茶(半淘汰)[/b][/color][/url]  [url=https://www.firefox.net.cn/newforum/search.php][color=red][b]④搜索论坛[/b][/color][/url]
GOLF-AT
千年狐狸
千年狐狸
  • UID11611
  • 注册日期2006-02-20
  • 最后登录2019-12-30
  • 发帖数3239
  • 经验265枚
  • 威望1点
  • 贡献值260点
  • 好评度59点
  • 社区居民
  • 忠实会员
11楼#
发布于:2009-01-18 16:30
安装 userChromeJS 这个扩展,然后用一段 javascript 语句就可以解决了。自从用了 userChromeJS 这个扩展,就省了好多扩展。

附件的脚本,包含以下几个功能(每段功能都有说明,不要的功能删除就可以了):
1、双击鼠标左键关闭标签(空白处新开标签),单击中键关闭标签(空白处恢复标签)
2、鼠标移到标签上延时500ms后自动激活标签
3、标签邮件菜单中增加“最近关闭的标签页”
4、最后一个标签关闭时,不关闭 firefox(针对firefox 3.1)
5、阻止拖拉标签时新开窗口的功能(针对firefox 3.1)
附件名称/大小 下载次数 最后更新
tab_func.uc.zip (2KB)  34 2009-01-19 11:48
taizitju
千年狐狸
千年狐狸
  • UID10093
  • 注册日期2005-11-27
  • 最后登录2012-04-12
  • 发帖数3638
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
12楼#
发布于:2009-01-18 16:30
GOLF-AT:安装 userChromeJS 这个扩展,然后用一段 javascript 语句就可以解决了。自从用了 userChromeJS 这个扩展,就省了好多扩展。回到原帖


可能是楼主没说清楚

我估计楼主是想以开发者的角度,用探索的精神,尝试以firefox为基础做一个xml+xul的实验。

这个帖子如果放在 “Mozilla 软件开发及相关技术” 版面就完美了。
[color=orange][b]为新手服务[/b][/color]  [color=BLUE][b]快速解决问题传送门:[/b][/color][url=https://www.firefox.net.cn/newforum/viewtopic.php?t=22571][color=red][b]①Firefox初级教程(置顶帖)[/b][/color][/url]  [url=https://www.firefox.net.cn/newforum/viewtopic.php?t=27478][color=red][b]②孟婆汤(清空profile工具)[/b][/color][/url]  [url=https://www.firefox.net.cn/newforum/viewtopic.php?t=26765][color=red][b]③减肥茶(半淘汰)[/b][/color][/url]  [url=https://www.firefox.net.cn/newforum/search.php][color=red][b]④搜索论坛[/b][/color][/url]
GOLF-AT
千年狐狸
千年狐狸
  • UID11611
  • 注册日期2006-02-20
  • 最后登录2019-12-30
  • 发帖数3239
  • 经验265枚
  • 威望1点
  • 贡献值260点
  • 好评度59点
  • 社区居民
  • 忠实会员
13楼#
发布于:2009-01-18 16:30
不赞成直接修改 firefox 本身的代码,一旦 firefox 升级,就得重新修改 firefox 本身的代码,费时费力,而且下次修改时可能有遗漏。
chixiang
小狐狸
小狐狸
  • UID27684
  • 注册日期2009-01-06
  • 最后登录2009-01-21
  • 发帖数4
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
14楼#
发布于:2009-01-18 16:30
GOLF-AT:不赞成直接修改 firefox 本身的代码,一旦 firefox 升级,就得重新修改 firefox 本身的代码,费时费力,而且下次修改时可能有遗漏。回到原帖


从软件开发的角度当然不会直接修改Firefox本身的代码了,这篇帖子的目的不一样,呵呵。
我的博客: <!-- w --><a class="postlink" href="http://www.chixiang.org">www.chixiang.org</a><!-- w -->
上一页
游客

返回顶部