Deaktivieren Sie die Rechtsklick-Bilder mit jquery

70

Ich möchte wissen, wie man mit jQuery Rechtsklick auf Bilder deaktiviert.

Ich weiß nur das:

<script type="text/javascript" language="javascript">
    $(document).ready(function() {
        $(document).bind("contextmenu",function(e) {
           return false;
        });
    }); 
</script>
Bat_Programmer
quelle
3
das sollte manchmal funktionieren;). Aber vergessen Sie es, es gibt 100 andere Möglichkeiten, ein Bild aus dem Internet zu speichern. Übrigens, wenn Sie das angeklickte Objekt übergeben, dann verwenden Sie es! jsfiddle.net/VZX4A
meo
3
ja ich weiß. Ich mache das nur, um die Anzahl der Bildkopien zu verringern. Es ist speziell für diejenigen, die nur wissen, wie man mit der rechten Maustaste klickt und speichert, dh für dumme Benutzer.
Bat_Programmer
3
Tu es einfach nicht. Sie schützen das Bild nicht vor dem Kopieren und deaktivieren die Standard- und erwartete Funktionalität des Browsers.
Joe Jordan
4
Ich binde einen Webbrowser in eine Access-Datenbank ein. Dieser Browser enthält eine dynamische Karte. Wenn Sie mit der rechten Maustaste auf die Karte klicken, wird die Option "Bild speichern unter ..." angezeigt. Wenn Sie ein solches Bild speichern, wird nur eine Kachel der Karte gespeichert. Dies wird die weniger technisch denkenden Leute, an die ich diese Datenbank sende, zum Teufel verwirren, und ich werde es ohne Zweifel erklären müssen. Es gibt überhaupt keinen Grund für mich, dieses Menü dort zu haben. Ich bin damit einverstanden, dass das Deaktivieren des Rechtsklicks auf Websites eine schlechte Sache ist, aber das bedeutet nicht, dass Sie dies niemals tun sollten.
Mr_Chimp
Mögliches Duplikat von Wie deaktiviere ich den Rechtsklick auf meine Webseite?
Cole Johnson

Antworten:

150

Das funktioniert:

$('img').bind('contextmenu', function(e) {
    return false;
}); 

Oder für neuere jQuery:

$('#nearestStaticContainer').on('contextmenu', 'img', function(e){ 
  return false; 
});

jsFiddle Beispiel

Jacob Relkin
quelle
53
Der neue Weg ist: $('body').on('contextmenu', 'img', function(e){ return false; }); obwohl ich etwas engeres als "Körper" empfehlen würde, wenn Sie können.
Myster
1
jQuery noch einmal mit dem Doppelsieg. <3
Foxinni
2
Hallo Jacob, kannst du mir bitte sagen, was die niedrigsten Versionen der jeweiligen Browser sind, die diese jQuery-Funktion unterstützen?
SexyBeast
1
Vielen Dank für Ihre Antwort. Wenn der Benutzer jedoch "Umschalt" + Rechtsklick drückt, wird das Kontextmenü angezeigt.
Sara N
11

Was ist Ihr Zweck, um den Rechtsklick zu deaktivieren? Das Problem bei jeder Technik ist, dass es immer einen Weg gibt, sie zu umgehen. Die Konsole für Firefox (Firebug) und Chrome ermöglicht das Aufheben der Bindung dieses Ereignisses. Wenn Sie möchten, dass das Bild geschützt wird, können Sie jederzeit einen Blick auf den temporären Cache für die Bilder werfen.

Wenn Sie ein eigenes Kontextmenü erstellen möchten, ist PreventDefault in Ordnung. Wähle einfach deine Schlachten hier aus. Nicht einmal eine große JavaScript-Bibliothek wie tnyMCE funktioniert in allen Browsern ... und das nicht, weil es nicht möglich ist ;-).

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

Persönlich bin ich eher auf ein offenes Internet aus. Das native Browserverhalten sollte nicht durch die Seiteninteraktionen behindert werden. Ich bin sicher, dass andere Möglichkeiten zur Interaktion gefunden werden können, die nicht der richtige Klick sind.

yopefonic
quelle
geändert, um als Klarstellung besser zu passen
yopefonic
8

Zum Deaktivieren Rechtsklick Option

<script type="text/javascript">
    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>
Prinz Antonius G.
quelle
2
Requisiten für die reine Javascript-Version, aber das OP fragte nach jQuery.
Trae Abell
7

In Chrome und Firefox haben die oben genannten Methoden nur funktioniert, wenn ich "live" anstelle von "bind" verwendet habe.

Das hat bei mir funktioniert:

$('img').live('contextmenu', function(e){
    return false;
});
Emz
quelle
2

Wäre es möglich, die Möglichkeit zu verlassen, mit der rechten Maustaste zu klicken und herunterzuladen, sobald ein separates Wasserzeichen auf dem Bild platziert ist. Dies verhindert natürlich keine Screenshots, dachte aber, dass dies ein guter Mittelweg sein könnte.

EZDC
quelle
1

Sie könnten dies versuchen:

var message="Sorry, right-click has been disabled";

function clickIE() {
    if (document.all) {
        (message);
        return false;
    }
}

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

if (document.layers) {
    document.captureEvents(Event.MOUSEDOWN);
    document.onmousedown = clickNS;
} else {
    document.onmouseup = clickNS;
    document.oncontextmenu = clickIE;
}

document.oncontextmenu = new Function("return false")

Testen Sie hier eine Demo

Serkan
quelle
1

Eine sehr einfache Möglichkeit besteht darin, das Bild als Hintergrund zu einem DIV hinzuzufügen und dann ein leeres transparentes GIF zu laden, das auf die gleiche Größe wie das DIV im Vordergrund eingestellt ist. das hält die weniger entschlossenen aus. Sie können den Hintergrund nicht abrufen, ohne den Code anzuzeigen und die URL zu kopieren. Wenn Sie mit der rechten Maustaste klicken, wird nur das transparente GIF heruntergeladen.

Chris
quelle
1

Das sollte funktionieren

$(function(){
     $('body').on('contextmenu', 'img', function(e){ 
         return false; 
     });
 });
Mohamad Hamouday
quelle
0

Der bessere Weg, dies ohne jQuery zu tun:

const images = document.getElementsByTagName('img');
for (let i = 0; i < images.length; i++) {
    images[i].addEventListener('contextmenu', event => event.preventDefault());
}
Hassan Azimi
quelle