原生javascript禁用和屏蔽鼠标右键
2024-10-20 08:55:18
(function(){
var doc=document,
ua = navigator.userAgent.toLowerCase(),
check = function(r){return r.test(ua);},
isOpera = check(/opera/),
isChrome = check(/chrome/),
isWebKit = check(/webkit/),
isSafari = !isChrome && check(/safari/),
isSafari2 = isSafari && check(/applewebkit\/4/),
isSafari3 = isSafari && check(/version\/3/),
isSafari4 = isSafari && check(/version\/4/),
isIE = !isOpera && check(/msie/),
isIE7 = isIE && check(/msie 7/),
isIE8 = isIE && check(/msie 8/),
isIE9 = isIE && check(/msie 9/),
isIE10 = isIE && check(/msie 10/),
isIE11 = isIE && check(/msie 11/),
isIE6 = isIE && !isIE7 && !isIE8 && !isIE9 && !isIE10 && !isIE11,
isGecko = !isWebKit && check(/gecko/),
isGecko2 = isGecko && check(/rv:1\.8/),
isGecko3 = isGecko && check(/rv:1\.9/);
function preventKey(e) {
var ev = e || window.event,//获取event对象
obj = ev.target || ev.srcElement,//获取事件源
t = obj.type || obj.getAttribute('type'),readonly = obj.readOnly||obj.getAttribute('readonly'), code = ev.keyCode||ev.which||ev.charCode,charcode = String.fromCharCode(code).toLowerCase();//获取事件源控件类型,控件只读属性,键盘值
if ( (code == 8 && t != "password" && t != "text" && t != "textarea")||(readonly&&(t == "password" || t == "text" || t == "textarea"))) {//除不只读输入框外禁止后退键
return false;
}
if (((isOpera || isGecko)?ev.which==0:true)&&(code == 116 || code == 122|| code == 123 || (ev.shiftKey && code == 121))||(((isOpera || isGecko)?ev.which!=0:true)&&ev.ctrlKey && (charcode == 'a' || charcode == 's'))) {//屏蔽 F5,F11,F12,shift+F10,ctrl+a,ctrl+s
if (isIE)
ev.keyCode = 0;
ev.returnValue = false;
return false;
}
};
if (isOpera || isGecko)
doc.onkeypress = preventKey;
else if (isIE || isChrome || isSafari)
doc.onkeydown = preventKey;
if(isIE)document.onselectstart=function(){return false;};
doc.oncontextmenu = function(){
if(window.event){
window.event.cancelBubble = true;
window.event.returnValue=false;
}
return false;
};
try{window.history.forward(1);}catch(e){}
})();
最新文章
- ASP.NET伪静态实现
- 激活Windows 8.1 RTM原来如此简单
- 一个.NET通用JSON解析/构建类的实现(c#)转
- win7+theano with GPU enabled
- Jmeter—6 CSV Data Set Config 通过文件导入数据
- stat(),lstat(),fstat() 获取文件/目录的相关信息
- CISC + RISC = Y86
- c++的复制构造函数
- JS中关于clientWidth offsetWidth scrollWidth 的区别及意义
- 《Spring Cloud与Docker微服务架构实战》配套代码
- Redis 缓存失效和回收机制续
- C++通过GetAdapatersInfo获取网卡配置信息
- vue移动端适配
- Maven之pom.xml配置文件详解
- Elasticsearch 搜索模块之Cross Cluster Search(跨集群搜索)
- Winform开发框架之框架演化
- 01 mysql
- 多款Android播放器源码集锦
- ATX 安卓设备 WiFi 统一管理以及设备自动化测试
- linux下c语言实现双进程运行
热门文章
- nginx.conf指令详解
- 服务端技术选型与考虑(go)
- 深度学习 Bottleneck layer / Bottleneck feature
- 1.ASP.NET Core介绍
- 实战远程文件同步(Remote File Sync)
- 把时间戳转换为 datatime 格式
- isolate sqflite demo
- ..\USER\stm32f10x.h(428): error: #67: expected a "}" ADC1_2_IRQn = 18, /*!
- Scrapy 概览笔记
- es6 javascript的Class 类的继承