Як відключити клацання правою кнопкою миші на своїй веб-сторінці?


315

Чи можу я відключити клацання правою кнопкою миші на своїй веб-сторінці без використання JavaScript? Я запитую це тому, що більшість браузерів дозволяє користувачеві відключати JavaScript.

Якщо ні, то як я можу використовувати JavaScript для відключення клацання правою кнопкою миші?


130
Відключення правої кнопки миші не є безпекою, це просто дратує користувачів. Будь-який браузер, який не дозволяє вам відключити це, нічого не вартий, але сайти, які роблять це в першу чергу, жахливі.
Ден Олсон

17
Якщо ви не хочете, щоб ваш вміст був прийнятий, не слід публікувати його в Інтернеті. :) Сучасні браузери можуть навіть перекрити можливість JavaScript відключити клацання правою кнопкою миші. Такі інструменти, як Firebug / Web Dev Toolbar роблять захист марним.
epascarello

7
ось невеликий сценарій користувача chrome / greesemonkey, щоб знову ввімкнути праву клацання: dl.dropbox.com/u/464119/Programming/javascript/…
ripper234

31
Дійсно @DanOlson ... що ти повинен робити, якщо хочеш кодувати власне меню правою кнопкою миші? Такі, як знайдено в cPanel.
Кодесміт

30
@epascarello Є певні випадки, що відключення клацання правою кнопкою миші є надзвичайно важливим, як наприклад, на кіоск-терміналах, користувач bceause насправді там не потребує, і залишаючи його там, насправді, може дратувати користувачів
Aram

Відповіді:


524

Ви можете зробити це за допомогою JavaScript, додавши слухача подій для події "контекстування" та викликавши preventDefault()метод:

document.addEventListener('contextmenu', event => event.preventDefault());

Це було сказано: НЕ робіть цього.

Чому? Тому що це не досягає нічого, крім дратує користувачів. Крім того, у багатьох браузерах є можливість захисту заборонити відключення правого клацання (контекстного) меню.

Не впевнений, чому ви цього хочете. Якщо ви переконані, що ви можете захистити свій вихідний код або зображення таким чином, подумайте ще раз: ви не можете.


86
Використовувати oncontextmenu="return false"щось інше, ніж тіло, може мати сенс, наприклад, на полотні.
AdrienBrault

62
Ми розміщуємо на кіосках машини і вибрали цей спосіб, щоб відключити користувачів від оновлення сторінки.
Тодд Хорст

21
@ToddHorst у такому випадку я б використовував спеціальну "Кіоск" версію браузера без будь-якого інтерфейсу, який зазвичай також доступний без будь-яких контекстних меню :)
mihi

17
Системи з дотиком іноді відображають певні події дотику, наприклад, довгий торкнення, клацнути правою кнопкою миші (і тим самим відкрити контекстне меню). Однак така поведінка може бути небажаною, і єдиним значущим способом запобігання, здається, є взагалі відключення контекстного меню.
АБО Mapper

58
Old Thread, але якщо хтось читає її, не всі веб-розробники роблять свої веб-сайти для себе, іноді замовник приходить до вас і наполягає на відключенні правого клацання, коли ви намагаєтесь переконати його, він просто шукатиме іншого розробника, який це зробить. без вагань
Danny22

123

НЕ ДАЙТЕ

Просто не треба.

Незалежно від того, що ви робите, ви не можете перешкодити користувачам мати повний доступ до кожного біту даних на вашому веб-сайті. Будь-який код коду Javascript можна вимкнути, просто відключивши Javascript у браузері (або використовуючи плагін, як NoScript). Крім того, немає жодного способу відключити можливість будь-якого користувача просто "переглядати джерело" або "переглянути інформацію про сторінку" (або використовувати wget) для вашого сайту.

Не варто докладати зусиль. Насправді це не спрацює. Це зробить ваш сайт активно ворожим для користувачів. Вони помітять це і перестануть відвідувати. Немає користі від цього, лише витрачені зусилля та втрачений трафік.

Не варто.

Оновлення: Здається, ця маленька тема з часом виявилася досить суперечливою. Незважаючи на це, я стою проти цієї відповіді на це питання. Іноді правильною відповіддю є порада замість буквальної відповіді.

Люди, які натрапляють на це питання, сподіваючись дізнатись, як створити спеціальні контекстні меню, повинні шукати в іншому місці, як-от такі:


229
Нічого не можу повірити, що це була прийнята відповідь. Існує безліч дійсних застосувань для видалення правої кнопки миші в веб-переглядачі за певних умов.
GAgnew

84
Справжня відповідь повинна бути:<body oncontextmenu="return false;">
Себастьян Гріньолі

18
@GAgnew: Існують дійсні способи заміни контекстного меню. Немає дійсних користувачів, які б відключили правові кліки беззастережно та не обробляли їх корисним способом.
ThiefMaster

80
Якщо користувач хоче зробити відеоігра HTML5, відключення правого клацання може бути дуже корисним. Зазвичай це не бажано, але просто сказати "DON'T" без належного контексту - це не так корисно.
Робсон Франча

51
-1 від мене теж. Ця відповідь не корисна. Існує маса вагомих причин відключити клацання правою кнопкою миші. Наприклад, я створив веб-додаток, який лікарні використовують на стійці реєстрації, а користувачі технічно не мають розуму. Незважаючи на те, що програма працює у їх веб-браузері, вони не розуміють, чому всі параметри меню з’являються при натисканні правою кнопкою миші. Ми отримали багато питань допомоги, які задавали нам питання, які варіанти є від людей, які вважали, що вони є частиною програми. Відключення їх має сенс у цьому випадку, як і у багатьох інших веб-додатках.
Микола

66

Первісне запитання стосувалося того, як зупинити правою кнопкою миші, враховуючи, що користувач може відключити JavaScript : це звучить нечестиво і зло (звідси негативні відповіді), - але всі дублікати тут переспрямовуються, хоча багато дублікатів просять менш злі цілі.

Наприклад, використання кнопки правої кнопки миші, наприклад, в іграх HTML5. Це можна зробити за допомогою вкладеного коду вище, або трохи приємніше щось подібне:

document.addEventListener("contextmenu", function(e){
    e.preventDefault();
}, false);

Але якщо ви робите гру, то пам’ятайте, що кнопка правою кнопкою миші запускає подію контекстного меню, але вона також запускає регулярні події в миску та миші . Тому вам потрібно перевірити, яка властивість події, щоб побачити, чи це ліва (яка === 1), середня (яка === 2) або права (яка === 3) кнопка миші, яка запускає подію.

Ось приклад jQuery - зауважте, що натискання правої кнопки миші призведе до запуску трьох подій: події mousedown, події контексту та події миші.

// With jQuery
$(document).on({
    "contextmenu": function(e) {
        console.log("ctx menu button:", e.which); 

        // Stop the context menu
        e.preventDefault();
    },
    "mousedown": function(e) { 
        console.log("normal mouse down:", e.which); 
    },
    "mouseup": function(e) { 
        console.log("normal mouse up:", e.which); 
    }
});

Отже, якщо ви використовуєте ліву та праву кнопки миші в грі, вам доведеться виконати деяку умовну логіку в обробці миші.


Якщо я включений dom.event.contextmenu.enabledв Firefox, чи будуть mousedownі mouseupподії по- , як і раніше спрацьовує , навіть якщо contextmenuнемає?
robertc

43

Якщо ви не переймаєтесь тим, як сповіщати користувача за допомогою повідомлення кожного разу, коли він намагається клацнути правою кнопкою миші, спробуйте додати це до тегу body

<body oncontextmenu="return false;">

Це заблокує весь доступ до контекстного меню (не лише правою кнопкою миші, а й клавіатурою).

Однак, як зазначено в інших відповідях, дійсно немає сенсу додавати деактиватор правої кнопки миші. Усі, хто має базові знання в браузері, можуть переглядати джерело та витягувати потрібну інформацію.


Так, але бувають випадки, коли мені хочеться коротко поділитися зображенням з тим, кого я знаю, не вистачає базових знань браузера. Відключення клацання правою кнопкою миші не є надійною на 100%, але якщо я розміщую зображення протягом декількох хвилин, щоб дати людині такий вигляд, це досить безпечно.
WillO

Системи з дотиком іноді відображають певні події дотику, наприклад, довгий торкнення, клацнути правою кнопкою миші (і тим самим відкрити контекстне меню). Однак така поведінка може бути небажаною, і єдиним значущим способом запобігання, здається, є взагалі відключення контекстного меню.
АБО Mapper

@WillO: У мене є подібний випадок використання, який мені потрібно обслуговувати, але FYI, користувачі завжди вдаватимуться до знімків екрана .
Хассан Байг

28

Якщо ви любитель jquery, використовуйте це

    $(function() {
        $(this).bind("contextmenu", function(e) {
            e.preventDefault();
        });
    }); 

4
Для цього використовується jQuery без причини. Це точно так само, як єдине твердження JavaScript, знайдене у відповіді пана Спікера, яке було розміщено за півтора року до цього. До речі, ця відповідь також включає рішення jQuery, яке вам знову не потрібно. Хтось, хто підтримав цю відповідь, навіть знає, що це робить? Чому це чекає, коли подія, готова до документу, перестане перешкоджати появі контекстного меню? Чому це використовується thisвсередині готової події? Для чого ви використовуєте bindзамість on?
Тьфу

20

По-перше, ви не можете досягти цього, не використовуючи можливості клієнта. Тут працює javascript.

По-друге, якщо ви намагаєтесь контролювати, що може споживати кінцевий користувач на вашому веб-сайті, то вам слід переосмислити спосіб відображення цієї інформації. Зображення має загальнодоступну URL-адресу, яку можна отримати за допомогою HTTP, не потребуючи браузера.

Автентифікація може контролювати, хто має доступ до яких ресурсів.

Вбудований водяний знак у зображення може довести, що зображення було від конкретної людини / компанії.

Зрештою, управління ресурсами - це справді управління користувачами та гостями.

Перше правило Інтернету, якщо ви не хочете, щоб його прийняли, не оприлюднюйте його!

Друге правило Інтернету, якщо ви не хочете, щоб його прийняли, не кладіть його в Інтернет!


20

Якщо ваша мета - не допустити, щоб люди могли завантажувати ваші зображення, як це сказала більшість людей, відключення клацання правою кнопкою миші є малоефективним.

Припустимо, що ви намагаєтеся захистити зображення альтернативними методами -

Користуючись флеш-програвачем, користувачі не можуть завантажити їх як такі, але вони могли легко зробити знімок екрана.

Якщо ви хочете бути більш аквардними, зробіть зображення фоном діва, що містить прозоре зображення, а-ля -

<div style="background-image: url(YourImage.jpg);">
   <img src="transparent.gif"/>
</div>

буде достатньо для стримування випадкових крадіжок ваших зображень (див. нижче для прикладу), але як і у всіх цих прийомів, тривіально перемогти з основним розумінням html.


2
Ви навіть можете завантажити зображення як base64, щоб надалі придушити код.
Мігель Бартельсман

16

Ви не можете виконати те, що запитуєте, не використовуючи Javascript. Будь-яка інша технологія, яку ви можете вибрати, може допомогти лише створити веб-сторінку на стороні сервера, яку слід надіслати в браузер.

Просто немає хорошого рішення, і немає періоду рішення без Javascript.


1
І навіть тоді це дратує користувачів, не кажучи вже про легкий обхід.
Манос Ділаверакіс

1
Я коли-небудь бачив сторінки, на яких є модальне спливаюче слово "Правий клік вимкнено", який потім показує меню правої кнопки миші, коли ви відхиляєте його. Вони також відображають повідомлення під час прокрутки за допомогою трекпада, що дуже дратує.
Піт Кіркхем

1
Так, це особливо дратує, оскільки зазвичай це забороняє людям "красти" зображення, які вже є на жорсткому диску, але все, що вона робить, це заважає мені використовувати контекстний пошук: addons.mozilla.org/en-US/firefox/addon/240 . Ті сволочі ...
Калвін

2
Мені подобається, що майже кожна відповідь на це - "Звичайно, використовуйте javascript!"
Чарльз Вуд

14

Якщо ваша мета - заборонити користувачам просто зберігати ваші зображення, ви також можете перевірити, чи натиснута ціль є зображенням, лише відключіть правий клацання в цьому випадку. Тож правою кнопкою миші можна користуватися в інших цілях. Взято з наведеного вище коду:

document.addEventListener("contextmenu", function(e){
    if (e.target.nodeName === "IMG") {
        e.preventDefault();
    }
}, false);

Це просто для того, щоб зняти найпростіший спосіб збереження ваших зображень, але це все одно можна зробити.


На мій погляд, це найкращий шлях - як користувач Інтернету, я час від часу знаходжу функціональність потрібного клацання, але як просте, просте (і так, легко піддається вирішенню) рішення це працює, не дратуючи.
Бен

9
<!DOCTYPE html>
<html>
<head>
<script type='text/javascript' src='http://code.jquery.com/jquery-1.4.4.min.js'></script>
<script type='text/javascript'>//<![CDATA[ 
$(function(){
$('img').bind('contextmenu', function(e){
return false;
}); 
});//]]>  
</script>
</head>
<body>
    <img src="http://www.winergyinc.com/wp-content/uploads/2010/12/ajax.jpg"/>
</body>



2
@ aravind3 Я використав ваш приклад, і він працює частуванням! Мої зображення все ще можна натискати і функціонувати так, як належить, але неможливо завантажити. Причина, по якій я хотів відключити клацання правою кнопкою миші, полягає в тому, що відвідувачі, які хочуть лише зображення, а потім відразу залишають, впливають на показник відмов. Принаймні таким чином, мій показник відмов не буде настільки поганим, як це може зайняти у них 1 або 2 хвилини, щоб це зрозуміти :) Будьте aravind3 !!!!
coolydude

6

Зробіть це як нижче (Це працює і на firefox):

$(document).on("contextmenu",function(e){

     if( e.button == 2 ) {
         e.preventDefault();
          callYourownFucntionOrCodeHere();
     }
return true;
});

5

Введіть цей код у свій <head>тег сторінки.

<script type="text/javascript"> 
function disableselect(e){  
return false  
}  

function reEnable(){  
return true  
}  

//if IE4+  
document.onselectstart=new Function ("return false")  
document.oncontextmenu=new Function ("return false")  
//if NS6  
if (window.sidebar){  
document.onmousedown=disableselect  
document.onclick=reEnable  
}
</script>

Це відключить клацання правою кнопкою миші на всій вашій веб-сторінці, але лише тоді, коли JavaScript увімкнено.


У Firefox це не працює, він вимикає вибір входу для набору форм :(
АЛЬВАН

5

Я використовував цей код, щоб відключити клацання правою кнопкою миші на будь-якій веб-сторінці. Ви можете використовувати цей код

jQuery(document).ready(function(){
  jQuery(function() {
        jQuery(this).bind("contextmenu", function(event) {
            event.preventDefault();
            alert('Right click disable in this site!!')
        });
    });
});
<html>
  <head>
    <title>Right click disable in web page</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  </head>
  <body>
    You write your own code
  </body>
</html>


4

Звичайно, як і за всіма іншими коментарями тут, це просто не працює.

Я колись сконструював простий аплет Java для клієнта, який змусив будь-яке захоплення зображення здійснюватись за допомогою захоплення екрана, і вам, можливо, захочеться розглянути подібну методику. Це спрацювало в межах обмежень, але я все ще думаю, що це було марною тратою часу.


4
    <script>
        window.oncontextmenu = function () {
            console.log("Right Click Disabled");
            return false;
        }
    </script>

3

Спробуйте це

<script language=JavaScript>
//Disable right mouse click Script

var message="Function Disabled!";

function clickIE4(){
if (event.button==2){
alert(message);
return false;
 }
}

function clickNS4(e){
if (document.layers||document.getElementById&&!document.all){
if (e.which==2||e.which==3){
alert(message);
return false;
}
}
}

if (document.layers){
document.captureEvents(Event.MOUSEDOWN);
document.onmousedown=clickNS4;
}
else if (document.all&&!document.getElementById){
document.onmousedown=clickIE4;
}

document.oncontextmenu=new Function("alert(message);return false")

</script>

3

Вимкнути правою кнопкою миші на вашій веб-сторінці просто. Існує лише кілька рядків коду JavaScript, які виконають цю роботу. Нижче наведено код JavaScript:

$("html").on("contextmenu",function(e){
   return false;
});

У наведеному вище коді я вибрав тег. Якщо ви додасте лише ці три рядки коду, він відключить клацання правою кнопкою миші на вашій веб-сторінці.

Джерело: Вимкніть правою кнопкою миші, скопіюйте, виріжте на веб-сторінці за допомогою jQuery



2

Я знаю, що спізнююсь, але хочу створити деякі припущення та пояснення для відповіді, яку я збираюся надати.

Чи можна відключити клацання правою кнопкою миші

Чи можна відключити клацання правою кнопкою миші на своїй веб-сторінці без використання Javascript?

Так, за допомогою JavaScript ви можете відключити будь-яку подію, яка трапляється, і ви можете це зробити переважно лише через javaScript. Як все, що вам потрібно:

  1. Працюючий апарат

  2. Веб-сайт або десь з якого можна дізнатися про ключові коди. Тому що вони вам знадобляться.

Тепер скажемо, що ви хочете заблокувати клавішу введення, натисніть ось код:

function prevententer () {
 if(event.keyCode == 13) {
  return false;
 }
}

Для клацання правою кнопкою миші скористайтеся цим:

event.button == 2

на місці с event.keyCode. І ти заблокуєш.

Я хочу запитати це, оскільки більшість браузерів дозволяє користувачам відключати його через Javascript.

Ви маєте рацію, браузери дозволяють вам використовувати, JavaScriptа JavaScript виконує всю роботу за вас. Вам нічого не потрібно налаштовувати, просто потрібен атрибут сценарію в голові.

Чому не слід його відключати?

Основна і швидка відповідь на це буде, що користувачі не сподобаються . Кожній людині потрібна свобода, ні в кого я не маю на увазі, що ніхто не хоче бути заблокованим чи відключеним, кілька хвилин тому я був на сайті, який заблокував мене правою клацанням, і я відчув, чому? Чи потрібно захистити свій вихідний код? Потім ctrl+shift+Jя відкрив Consoleі тепер я можу перейти до HTML-codeвкладки. Іди вперед і зупини мене. Це не додасть жодного рівня безпеки до вашої програми.

У правому клацанні є багато корисних меню, як-от "Копіювати", "Вставити", "Пошук тексту" в Google (у Chrome) та багато іншого. Таким чином, користувач хотів би отримати легкий доступ, а не запам'ятовувати багато комбінацій клавіш. Будь-хто ще може скопіювати контекст, зберегти зображення або зробити все, що завгодно.

Браузери використовують навігацію мишею: у деяких браузерах, таких як Opera, використовується навігація мишею, тому, якщо ви вимкнете її, користувач, безумовно, ненавидить ваш інтерфейс користувача та сценарії.

Отже, це було основним, я збирався написати ще трохи про збереження вихідного коду hehehe, але, нехай це буде відповіддю на ваше запитання.

Посилання на ключові коди:

Код кнопки та миші:

http://www.w3schools.com/jsref/event_button.asp

https://developer.mozilla.org/en-US/docs/Web/API/event.button (оцінили б і користувачі).

Чому б не відключити клацання правою кнопкою миші:

http://www.sitepoint.com/dont-disable-right-click/


1

Javascript:

document.getElementsByTagName("html")[0].setAttribute("oncontextmenu", "return false"); 

0

Важлива примітка: Це залежить від браузера та ОС, дозволяти таку профілактику чи ні!

Чи варто це робити? Ні . Тому що це не завадить користувачеві, а просто роздратує його / її.

Чи можете ви ним користуватися? Так . Приклади: у деяких веб-додатках, де потрібно налаштувати спливаюче меню, в грі, де користувачі можуть бути роздратовані, коли помилково натискають правою кнопкою миші, та інших випадках.

Chrome (v65) в Ubuntu 16.04 = Ви можете відключити клацання правою кнопкою миші.

Chrome (v65) в Mac OS 10.11 = НЕ МОЖЕ вимкнути правою кнопкою миші.

Chrome (v65) в Windows 7 = НЕ МОЖЕ вимкнути правою кнопкою миші.

Firefox (v41) в Mac OS 10.11 = Ви можете відключити клацання правою кнопкою миші.

Firefox (v43) у Windows 7 = Ви можете відключити клацання правою кнопкою миші.

// Vanilla JS way
document.addEventListener('contextmenu', function(e){
    e.preventDefault();
});

// jQuery way
$(document).bind('contextmenu', function(e) {
    e.preventDefault();
});

0

Деякі речі, які слід врахувати:

Плагіни веб-переглядача на кшталт "включити правою кнопкою миші" в магазині хрому існують не просто так, і ти не зможеш їх обійти. Є ЛІТЕРАЛЬНЕ НІЧЕ, що ви можете зробити, щоб люди не завантажували ваш вміст, оскільки вони буквально повинні завантажувати його, щоб у будь-якому разі його побачити у своєму браузері; Люди намагаються, але це завжди там.

Загалом, якщо вміст не повинен бути загальнодоступним, не розміщуйте його в Інтернеті.

Крім того, неможливість клацання правою кнопкою миші є проблемою доступності і у багатьох випадках становить протиправну дискримінацію сліпих чи інвалідів чи літніх людей. Перевірте місцеві закони, але в США це активно проти закону у формі Федеральної АДС, оскільки сліпі або літні люди, які можуть мати проблеми із зором, є юридично захищеним класом.

Тож замість того, щоб робити це і витрачати багато часу та зусиль, навіть не турбуйтеся, намагаючись це зробити. Це може просто подати до суду на вашу компанію або не допустити аудиту відповідності.


0

Спробуйте цей код, щоб відключити параметр елемента перевірки

    jQuery(document).ready(function() {
    function disableSelection(e) {
        if (typeof e.onselectstart != "undefined") e.onselectstart = function() {
            return false
        };
        else if (typeof e.style.MozUserSelect != "undefined") e.style.MozUserSelect = "none";
        else e.onmousedown = function() {
            return false
        };
        e.style.cursor = "default"
    }
    window.onload = function() {
        disableSelection(document.body)
    };

    window.addEventListener("keydown", function(e) {
        if (e.ctrlKey && (e.which == 65 || e.which == 66 || e.which == 67 || e.which == 70 || e.which == 73 || e.which == 80 || e.which == 83 || e.which == 85 || e.which == 86)) {
            e.preventDefault()
        }
    });
    document.keypress = function(e) {
        if (e.ctrlKey && (e.which == 65 || e.which == 66 || e.which == 70 || e.which == 67 || e.which == 73 || e.which == 80 || e.which == 83 || e.which == 85 || e.which == 86)) {}
        return false
    };

    document.onkeydown = function(e) {
        e = e || window.event;
        if (e.keyCode == 123 || e.keyCode == 18) {
            return false
        }
    };

    document.oncontextmenu = function(e) {
        var t = e || window.event;
        var n = t.target || t.srcElement;
        if (n.nodeName != "A") return false
    };
    document.ondragstart = function() {
        return false
    };
});

1
Дякуємо за цей фрагмент коду, який може надати деяку короткочасну допомогу. Правильне пояснення значно покращило б його довгострокове значення, показавши, чому це хороше рішення проблеми, та зробило б кориснішим майбутнім читачам інші подібні питання. Будь ласка, відредагуйте свою відповідь, щоб додати пояснення, включаючи зроблені вами припущення.
Toby Speight

Це можна надзвичайно легко перемогти в Chrome: Клацніть на 3 крапки біля зображення вашого профілю> Інші інструменти> Інструменти для розробників
sportzpikachu

-1

Використовуйте цю функцію, щоб відключити клацання правою кнопкою миші. Ви можете відключити ліву клацання та натиснути checking 1 and 0відповідну кнопку

document.onmousedown = rightclickD;
            function rightclickD(e) 
            { 
                e = e||event;
                console.log(e);
                if (e.button == 2) {
                //alert('Right click disabled!!!'); 
                 return false; }
            }

Використання Javascript для того, що HTML вже робить, є поганою інженерією і марною
fairduane
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.