(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){}
})();

最新文章

  1. ASP.NET伪静态实现
  2. 激活Windows 8.1 RTM原来如此简单
  3. 一个.NET通用JSON解析/构建类的实现(c#)转
  4. win7+theano with GPU enabled
  5. Jmeter—6 CSV Data Set Config 通过文件导入数据
  6. stat(),lstat(),fstat() 获取文件/目录的相关信息
  7. CISC + RISC = Y86
  8. c++的复制构造函数
  9. JS中关于clientWidth offsetWidth scrollWidth 的区别及意义
  10. 《Spring Cloud与Docker微服务架构实战》配套代码
  11. Redis 缓存失效和回收机制续
  12. C++通过GetAdapatersInfo获取网卡配置信息
  13. vue移动端适配
  14. Maven之pom.xml配置文件详解
  15. Elasticsearch 搜索模块之Cross Cluster Search(跨集群搜索)
  16. Winform开发框架之框架演化
  17. 01 mysql
  18. 多款Android播放器源码集锦
  19. ATX 安卓设备 WiFi 统一管理以及设备自动化测试
  20. linux下c语言实现双进程运行

热门文章

  1. nginx.conf指令详解
  2. 服务端技术选型与考虑(go)
  3. 深度学习 Bottleneck layer / Bottleneck feature
  4. 1.ASP.NET Core介绍
  5. 实战远程文件同步(Remote File Sync)
  6. 把时间戳转换为 datatime 格式
  7. isolate sqflite demo
  8. ..\USER\stm32f10x.h(428): error: #67: expected a "}" ADC1_2_IRQn = 18, /*!
  9. Scrapy 概览笔记
  10. es6 javascript的Class 类的继承