自己動手,修改 Firefox3 的快速鍵

來源:互聯網
上載者:User
 

一、源起

Firefox下的這幾個快速鍵始終讓我不習慣:

1. 右鍵菜單中的“另存新檔”

IE核心的瀏覽器,在連結上點右鍵彈出的菜單是這樣的:

快速鍵為A 

而Firefox的預設菜單是這樣的
 
快速鍵為K

2. Tab前後切換

在MT和TW裡,我一般將Tab向前向後切換分別設定為 Ctrl + Left   和 Ctrl + Right

但在Firefox中,對應的卻是 Ctrl + PageUp 和 Ctrl + PageDown   ( 或者 Ctrl + Tab 和 Ctrl + Shift + Tab )

我在網上找了一下修改Firefox預設快速鍵的方法,基本上說的都是用一個叫 keyconfig 的擴充。

我不大想再給我本已顯臃腫的Firefox再加包袱,就自己研究了一下firefox下的一堆jar檔案,結果居然讓我給找到了。

下面貼出修改方法,大家可以舉一反三,進行定製。

二、修改

我使用的Firefox版本是portableFirefox3, update to 2009011913 Firefox 3.0.6
先來看看怎麼修改“另存新檔”…

1. 修改“連結另存新檔(K)…”快速鍵

首先我把 FireFoxPortable3/App/Firefox/chrome 下的jar包都解壓到對應名字的目錄中,然後用 TotalCommand 在整個目錄尋找字串“連結另存新檔”
結果直接讓我找到了這個檔案:

zh-CN.jar/locale/browser/browser.dtd

<!ENTITY saveLinkCmd.label "連結另存新檔…"><br /><!ENTITY saveLinkCmd.accesskey "k"><br />...<br /><!ENTITY copyLinkCmd.label "複製連結地址"><br /><!ENTITY copyLinkCmd.accesskey "a">

估計就是這裡了,於是我把上面兩個對調了一下
<!ENTITY saveLinkCmd.label "連結另存新檔…"><br /><!ENTITY saveLinkCmd.accesskey "a"><br />...<br /><!ENTITY copyLinkCmd.label "複製連結地址"><br /><!ENTITY copyLinkCmd.accesskey "k">

好了,先確保關掉firefox,然後把這個檔案放回zh-CN.jar這個包的對應路徑下
重新開啟firefox看看!
哈哈,成功!
 

2. 修改Tab切換快速鍵

第一次嘗試就修改成功,這極大地增強了我的信心,接著來改tab前後切換的快速鍵。
這個感覺會麻煩一點,因為沒有確切的關鍵字給我作為依據進行搜尋。

我試著用"Tab"作為關鍵字在整個目錄找檔案,結果中過濾掉圖片資源,有如下結果:

 

browser.jar/content/browser/preferences/tabs.js
chrome.jar/test/browser/content/browser/preferences/tabs.xul
chrome.jar/test/browser/content/browser/tabbrowser.css
browser.jar/content/browser/tabbrowser.xml
classic.jar/skin/classic/aero/global/tabbox.css
classic.jar/skin/classic/global/tabbox.css
en-US.jar/locale/browser/preferences/tabs.dtd
en-US.jar/locale/browser/tabbrowser.dtd
en-US.jar/locale/browser/tabbrowser.properties
toolkit.jar/content/global/bindings/tabbox.xml
zh-CN.jar/locale/browser/preferences/tabs.dtd
zh-CN.jar/locale/browser/tabbrowser.dtd
zh-CN.jar/locale/browser/tabbrowser.properties

我再試著在這些檔案裡搜尋字串"pageDown"(不區分大小寫)
結果一個都沒搜到
重新試著搜"page_down",結果就搜到了這個檔案

toolkit.jar/content/global/bindings/tabbox.xml

我把定位到的這部分整塊代碼抄下來給大家看看:(綠色部分是我後來加的注釋)


<method name="handleEvent">
    <parameter
name="event"/>
    <body>
        <![CDATA[
            if
(!event.isTrusted) {
                // Don't let untrusted events mess with
tabs.
                    return;
            }

            switch (event.keyCode) {
                case
event.DOM_VK_TAB:
                    if (event.ctrlKey &&
!event.altKey && !event.metaKey)
                        if
(this.tabs && this.handleCtrlTab) {
                           
this.tabs.advanceSelectedTab(event.shiftKey ? -1 : 1,
true);
                           
event.stopPropagation();
                           
event.preventDefault();
                        }
                   
break;
                case event.DOM_VK_PAGE_UP:
//1, tab向前切換
                   
if (event.ctrlKey && !event.shiftKey && !event.altKey &&
!event.metaKey)
                        if (this.tabs &&
this.handleCtrlPageUpDown) {
                           
this.tabs.advanceSelectedTab(-1, true);
                           
event.stopPropagation();
                           
event.preventDefault();
                        }
                   
break;
                case event.DOM_VK_PAGE_DOWN//2,
tab向後切換

                    if (event.ctrlKey &&
!event.shiftKey && !event.altKey &&
!event.metaKey)
                        if (this.tabs &&
this.handleCtrlPageUpDown) {
                           
this.tabs.advanceSelectedTab(1, true);
                           
event.stopPropagation();
                           
event.preventDefault();
                        }
                   
break;
                case event.DOM_VK_LEFT: //3,功能未研究
                    if (event.metaKey
&& event.altKey && !event.shiftKey &&
!event.ctrlKey)
                        if (this.tabs &&
this._handleMetaAltArrows) {
                            var offset =
window.getComputedStyle(this, "").direction == "ltr" ? -1 :
1;
                            this.tabs.advanceSelectedTab(offset,
true);
                           
event.stopPropagation();
                           
event.preventDefault();
                        }
                   
break;
                case event.DOM_VK_RIGHT:
//4,功能未研究
                    if
(event.metaKey && event.altKey && !event.shiftKey &&
!event.ctrlKey)
                        if (this.tabs &&
this._handleMetaAltArrows) {
                            var offset =
window.getComputedStyle(this, "").direction == "ltr" ? 1 :
-1;
                            this.tabs.advanceSelectedTab(offset,
true);
                           
event.stopPropagation();
                           
event.preventDefault();
                        }
                   
break;
            }
        ]]>
   
</body>
</method>

結合我知道的預設快速鍵,我很快定位了要修改的地方(注釋的四行)
把1和3兩行對調,2和4兩行對調
我想這樣應該滿足預期的行為了,所以儲存,把它壓縮回原jar的相應路徑
再次開啟firefox

哈哈,又成功了!

好了,我的經驗就介紹到這裡。
相信對這些jar檔案動動手腳,我們還能做更多的事兒~
這些以後有時間再研究吧,如果你有什麼新的發現,歡迎給我留言提供線索!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.