2015-10-05 60 views
1

我正在幫助一家公司在所見即所得編輯器中使用撤銷/重做功能調試一些問題。不幸的是,Safari似乎吞噬了CMD + Z擊鍵,並且它永遠不會到達keydown回調。在Safari中攔截CMD + Z,CMD + SHIFT + Z和CMD + Y

有沒有辦法在Javascript中檢測這些擊鍵並阻止默認操作? (編輯器有自己的撤銷/重做堆棧)。

更新

對不起,我應該說,我可以攔截CMD + Z當瀏覽器本地撤消堆棧爲空,或者當輸入或CONTENTEDITABLE不在焦點。否則,它似乎不會被觸發或冒泡。

+0

檢測,是(http://stackoverflow.com/questions/7251956/detecting-command-keystroke-in-safari/7252716#7252716)。預防,可能不會。 – Touffy

+0

我發現這個項目可以捕獲cmd + z並且可以阻止它冒泡:https://github.com/ccampbell/mousetrap不幸的是,我一直無法破譯它如何成功到目前爲止,所以我可以拉入只是我需要的一點。 –

回答

0

我有一個奇怪的情況。原代碼我沒有阻止事件的冒泡:

evt.preventDefault(); 
evt.stopPropagation(); 

當我加入這個並刷新頁面,瀏覽器仍然攔截按鍵。只是偶然發現,如果我關閉了瀏覽器選項卡並在測試頁面打開了一個新瀏覽器,那麼瀏覽器必須重置某些內容,現在我可以攔截並停止默認的撤銷/重做功能:使用keydown事件:

if (evt.metaKey || evt.ctrlKey) { 
    switch (evt.which) { 
     case 89: // redo, CMD+Y 
      evt.preventDefault(); 
      evt.stopPropagation(); 
      // Do your Redo stuff 
      break; 
     case 90: 
      if (evt.shiftKey) { // redo, CMD+SHIFT+Z 
       evt.preventDefault(); 
       evt.stopPropagation(); 
       // Do your Redo stuff 
      } else { // undo, CMD+Z 
       evt.preventDefault(); 
       evt.stopPropagation(); 
       // Do your Undo stuff 
      } 
      break; 
    } 
} 

工程請客:)