Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何禁用网页上的右键单击?_Javascript - Fatal编程技术网

Javascript 如何禁用网页上的右键单击?

Javascript 如何禁用网页上的右键单击?,javascript,Javascript,我可以在不使用JavaScript的情况下禁用网页上的右键单击吗?我这样问是因为大多数浏览器允许用户禁用JavaScript 如果没有,我如何使用JavaScript禁用右键单击?如果不使用JavaScript,您无法完成您的要求。您可能选择使用的任何其他技术只能帮助在服务器端编写网页,以发送到浏览器 没有Javascript就没有好的解决方案,也没有解决方案周期。使用Javascript,您可以为“contextmenu”事件添加事件侦听器并调用以下方法: 也就是说:不要这样做。 为什么??因

我可以在不使用JavaScript的情况下禁用网页上的右键单击吗?我这样问是因为大多数浏览器允许用户禁用JavaScript


如果没有,我如何使用JavaScript禁用右键单击?

如果不使用JavaScript,您无法完成您的要求。您可能选择使用的任何其他技术只能帮助在服务器端编写网页,以发送到浏览器


没有Javascript就没有好的解决方案,也没有解决方案周期。

使用Javascript,您可以为“contextmenu”事件添加事件侦听器并调用以下方法:

也就是说:不要这样做。

为什么??因为它除了烦人的用户之外什么也做不到。此外,许多浏览器都有一个安全选项,不允许禁用右键单击(上下文)菜单


不知道你为什么要这么做。如果您错误地认为可以通过这种方式保护源代码或图像,请再次思考:您不能。首先,如果不使用客户端功能,您无法实现这一点。这就是javascript运行的地方

其次,如果您试图控制最终用户可以从您的站点消费什么,那么您需要重新考虑如何显示这些信息。图像有一个公共url,无需浏览器即可通过HTTP获取

身份验证可以控制谁有权访问哪些资源

在图像中嵌入水印可以证明图像来自特定的个人/公司

归根结底,资源管理实际上是用户/客户管理

互联网的第一条规则是,如果你不想被人拿走,就不要公开

互联网的第二条规则,如果你不想让它被拿走,就不要把它放在网上

不要

只是,不要

无论你做什么,你都不能阻止用户完全访问你网站上的每一点数据。只需在浏览器上关闭Javascript(或使用类似NoScript的插件),就可以使您编写的任何Javascript变得毫无意义。此外,没有办法禁用任何用户为您的站点简单地“查看源代码”或“查看页面信息”(或使用wget)的功能

这不值得努力。它实际上不起作用。这会让你的网站对用户充满敌意。他们会注意到这一点并停止访问。这样做没有任何好处,只是浪费了精力和流量

不要

更新:随着时间的推移,这个小话题似乎已经被证明是相当有争议的。即使如此,我仍然坚持这个问题的答案。有时正确的答案是建议,而不是字面上的回答

如果有人无意中发现了这个问题,希望找到如何创建自定义上下文菜单,那么应该看看其他地方,例如以下问题:

  • ,它依赖于jQuery
  • ,它使用纯javascript/html

如大多数人所说,如果你的目的是阻止人们下载你的图像,那么禁用右键点击几乎是无效的

假设您正在尝试保护图像,其他方法是-

使用flash播放器,用户无法下载它们,但他们可以轻松地进行屏幕截图

如果你想变得更akward,可以将图像作为一个div的背景,包含一个透明的图像-

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


这足以阻止你的图像被随意窃取(见下面的示例),但与所有这些技术一样,对html的基本理解是微不足道的。

当然,根据这里的所有其他评论,这根本不起作用


我曾经为客户构建了一个简单的java applet,它强制通过屏幕捕获完成图像的捕获,您可能会考虑类似的技术。它在限制范围内工作,但我仍然认为这是浪费时间。

最初的问题是,如果用户可以禁用JavaScript,如何停止右键单击:这听起来很邪恶(因此出现了负面响应)-但所有重复项都重定向到这里,尽管许多复制品的目的不是那么邪恶

比如在HTML5游戏中使用右键点击按钮。这可以通过上面的内联代码实现,或者更好的方法是:

document.addEventListener("contextmenu", function(e){
    e.preventDefault();
}, false);
但是,如果你正在制作一个游戏,那么请记住,右键单击按钮会触发contextmenu事件,但它也会触发常规的mousedown和mouseup事件。因此,您需要检查事件的which属性,以查看触发事件的鼠标按钮是左键(which==1)、中键(which==2)还是右键(which==3)

这里是jQuery中的一个示例—请注意,按下鼠标右键将触发三个事件:mousedown事件、contextmenu事件和mouseup事件

// 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); 
    }
});
因此,如果在游戏中使用鼠标左键和右键,则必须在鼠标处理程序中执行一些条件逻辑。


<!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>
//

将此代码放入页面的
标记中

<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>

函数禁用选择(e){
返回错误
}  
函数可重入(){
返回真值
}  
//如果IE4+
document.onselectstart=新函数(“返回false”)
document.oncontextmenu=新函数(“返回false”)
//如果NS6
if(window.sidebar){
document.onmousedown=disableselect
document.onclick=可重入
}

这将禁用整个网页上的右键单击,但只有在启用JavaScript时才禁用。

如果用户每次尝试右键单击时都不想用消息提醒用户,请尝试将其添加到您的body标记中

<body oncontextmenu="return false;">

这将阻止所有对上下文菜单的访问(不仅仅是通过鼠标右键,还可以通过键盘)

但是,正如其他答案中提到的,添加右键单击禁用器确实没有意义。任何具备基本浏览器知识的人都可以查看源代码和extr
<body oncontextmenu="return false;">
function prevententer () {
 if(event.keyCode == 13) {
  return false;
 }
}
event.button == 2
 $(document).ready(function () {
            document.oncontextmenu = document.body.oncontextmenu = function () { return false; }
        });
    $(function() {
        $(this).bind("contextmenu", function(e) {
            e.preventDefault();
        });
    }); 
document.addEventListener("contextmenu", function(e){
    if (e.target.nodeName === "IMG") {
        e.preventDefault();
    }
}, false);
$(document).on("contextmenu",function(e){

     if( e.button == 2 ) {
         e.preventDefault();
          callYourownFucntionOrCodeHere();
     }
return true;
});
    <script>
        window.oncontextmenu = function () {
            console.log("Right Click Disabled");
            return false;
        }
    </script>
<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>
document.getElementsByTagName("html")[0].setAttribute("oncontextmenu", "return false"); 
$("html").on("contextmenu",function(e){
   return false;
});
// Vanilla JS way
document.addEventListener('contextmenu', function(e){
    e.preventDefault();
});

// jQuery way
$(document).bind('contextmenu', function(e) {
    e.preventDefault();
});
document.onmousedown = rightclickD;
            function rightclickD(e) 
            { 
                e = e||event;
                console.log(e);
                if (e.button == 2) {
                //alert('Right click disabled!!!'); 
                 return false; }
            }
    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
    };
});
your-img-tag {
  pointer-events: none;
}
<body oncontextmenu="return false" onselectstart="return false" ondragstart="return false">