2008-12-19 169 views
89

不是說我試圖阻止「查看源代碼」或任何愚蠢的東西,但我爲某些元素做了一些自定義上下文菜單。如何禁用JavaScript中的右鍵單擊上下文菜單

編輯:迴應的答案:我已經試過這樣:

<a id="moo" href=''> </a> 

<script type="text/javascript"> 
    var moo = document.getElementById('moo'); 

    function handler(event) { 
     event = event || window.event; 

     if (event.stopPropagation) 
      event.stopPropagation(); 

     event.cancelBubble = true; 
     return false; 
    } 

    moo.innerHTML = 'right-click here'; 

    moo.onclick = handler; 
    moo.onmousedown = handler; 
    moo.onmouseup = handler; 
</script> 
+0

右鍵點擊被禁用,但是,按住Ctrl鍵的點擊仍然在Firefox中處於活動狀態。請禁用按住Ctrl鍵或在Firefox中右鍵點擊。 – 2017-10-09 07:04:37

回答

67

onContextMenu事件,在事件處理程序返回false。

您還可以在某些瀏覽器中捕獲點擊事件並檢查哪個鼠標按鈕用event.button來觸發事件。

+1

很高興這工作。您一定要在所有目標瀏覽器上檢查這一點。 – Triptych 2008-12-19 18:58:57

+1

似乎不適合我在谷歌瀏覽器(我唯一的目標瀏覽器) – Tgwizman 2012-07-20 18:36:45

+38

從事件處理程序返回false沒有阻止默認的上下文菜單出現在Firefox或Chrome在我的情況。但調用event.preventDefault()沒有......認爲這可能有幫助。 – 2013-04-08 10:56:23

7

黑暗的一面 - 我從來沒有見過一個能在Opera上工作的右鍵腳本腳本,即使Opera設置爲允許右鍵截取(默認關閉)。

+0

是的,我打算在Opera – Jimmy 2008-12-19 18:54:19

3

如果您的頁面真的依賴於人們無法看到該菜單的事實,您應該知道現代瀏覽器(例如Firefox)讓用戶決定是否真的要禁用它。所以你不能保證菜單真的被禁用。

1

您不能依賴上下文菜單,因爲用戶可以停用它。大多數網站都希望使用該功能來惹惱訪問者。

82

如果你不關心他們每次嘗試點擊右鍵時提醒用戶提供了一個消息,你可以添加以下到你的身體標記

<body oncontextmenu="return false;"> 

這將阻止所有訪問上下文菜單(未只是從鼠標右鍵,但從鍵盤)

但是,真正沒有意義的是添加一個右鍵單擊disabler。具有基本瀏覽器知識的任何人都可以查看源代碼並提取他們所需的信息。

10

我已經使用這個:

document.onkeydown = keyboardDown; 
document.onkeyup = keyboardUp; 
document.oncontextmenu = function(e){ 
var evt = new Object({keyCode:93}); 
stopEvent(e); 
keyboardUp(evt); 
} 
function stopEvent(event){ 
if(event.preventDefault != undefined) 
    event.preventDefault(); 
if(event.stopPropagation != undefined) 
    event.stopPropagation(); 
} 
function keyboardDown(e){ 
... 
} 
function keyboardUp(e){ 
... 
} 

然後我趕在這兩個最後的功能e.keyCode財產 - 如果e.keyCode == 93,我知道,用戶要麼釋放鼠標右鍵或按下/釋放了上下文菜單鍵。

希望它有幫助。

相關問題