2010-05-30 57 views
3

首先背景:取消網頁前進/後退快捷鍵在Firefox與Greasemonkey的

在Firefox 3.6.3在Mac OS X 10.5.8輸入文本時爲標準命令+ LEFTARROW和Command +向右鍵的熱鍵組合將光標分別跳到當前行的開始/結束位置。但是,當使用CKEditor,FCKEditor和YUI Editor時,Firefox似乎並不完全認識到它是一個文本區域。相反,它會退回到在瀏覽器歷史記錄中後退/前進的熱鍵的默認功能。發生這種情況後,編輯器中的文本也會在您返回到頁面時被清除,這樣就很容易丟失正在處理的內容。

我正在嘗試編寫一個greasemonkey腳本,我可以使用它捕獲事件並防止執行頁面前移/後退跳轉。到目前爲止,我已經能夠看到事件與以下用作一個的GreaseMonkey腳本.user.js:

document.addEventListener('keypress', function (evt) { 
// grab the meta key 
var isCmd = evt.metaKey; 

// check to see if it is pressed 
if(isCmd) 
{ 
    // if so, grab the key code; 
    var kCode = evt.keyCode; 

    if(kCode == 37 || kCode == 39) 
    { 
    alert(kCode); 
    } 
} 

}, 假 );

安裝時/啓用後,按命令+左|右箭頭鍵彈出與相應的代碼的警告,但一旦對話框關閉,瀏覽器執行頁前進/後退的舉動。我試着用evt.keyCode = 0設置一個新的代碼,但那不起作用。

所以,問題是,可以更新Greasemonkey腳本,以防止後退/前進頁面移動? (注意:我也願意接受其他解決方案,不必是Greasemonkey,這只是我嘗試過的方向,真正的目標是能夠禁用前進/後退熱鍵功能。 )

+0

我嘗試了幾次,但由於某種原因,上面的代碼片段不會保留在代碼突出顯示的區域。如果你複製這個,確保你得到最後的「},false);」部分。 – 2010-05-30 02:15:58

回答

2

alert(kCode);之後加return false; 大部分時間應該這樣做。

也可能需要添加:

evt.preventDefault(); 
and/or 
evt.stopPropagation(); 

這兩個功能在大多數FF版本的工作,但我不知道在Mac。另外,通常,你的func將在編輯器腳本之後觸發。但是,如果它之前啓動,則可能會禁用該光標跳轉。

+0

evt.preventDefault();得到它了。它確實也禁用了光標跳轉,但我沒有問題。我寧願不得不手動來做,而不是冒數據丟失的風險。 的完整代碼: document.addEventListener( '按鍵', 函數(EVT) { //取得的元密鑰 變種isCmd = evt.metaKey; //檢查是否被按下 它如果(isCmd) { 若然//,抓住鍵碼; 變種KCODE = evt.keyCode; //看它是否向左或向右箭頭鍵 如果(KCODE == 37 || KCODE == 39 ) { //如果是的話,防止默認值被觸發 evt.preventDefault(); } } }, 假 ); – 2010-05-30 15:31:44