前两天分享的插件 WP Content Copy Protection & No Right Click——深度保护您的网站内容 有网友说可以把检查代码的功能给屏蔽了,经我个人测试发现我们依旧可以通过 F12、Shift+Ctrl+I等一些操作将控制台调取出来,为了更好地保护网站内容,决定分享一篇如何禁止用户打开控制台的文章,也就有了此文。
网上找的很多代码不管用,最后在 wangning1125 博客上发现下面这段代码测试有效,分享给大家。先把原版代码放在下面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style type="text/css"> /*禁止选中文字*/ body{ -moz-user-select: none; /*火狐*/ -webkit-user-select: none; /*webkit浏览器*/ -ms-user-select: none; /*IE10*/ -khtml-user-select: none; /*早期浏览器*/ user-select: none; } </style> </head> <body> <p>Test</p> <script type='text/javascript'> //禁用右键(防止右键查看源代码) window.oncontextmenu=function(){return false;} //禁止任何键盘敲击事件(防止F12和shift+ctrl+i调起开发者工具) window.onkeydown = window.onkeyup = window.onkeypress = function () { window.event.returnValue = false; return false; } //如果用户在工具栏调起开发者工具,那么判断浏览器的可视高度和可视宽度是否有改变,如有改变则关闭本页面 var h = window.innerHeight,w=window.innerWidth; window.onresize = function () { if (h!= window.innerHeight||w!=window.innerWidth){ window.close(); window.location = "about:blank"; } } /*好吧,你的开发者工具是单独的窗口显示,不会改变原来网页的高度和宽度, 但是你只要修改页面元素我就重新加载一次数据,让你无法修改页面元素(不支持IE9以下浏览器)*/ if(window.addEventListener){ window.addEventListener("DOMCharacterDataModified", function(){window.location.reload();}, true); window.addEventListener("DOMAttributeNameChanged", function(){window.location.reload();}, true); window.addEventListener("DOMCharacterDataModified", function(){window.location.reload();}, true); window.addEventListener("DOMElementNameChanged", function(){window.location.reload();}, true); window.addEventListener("DOMNodeInserted", function(){window.location.reload();}, true); window.addEventListener("DOMNodeInsertedIntoDocument", function(){window.location.reload();}, true); window.addEventListener("DOMNodeRemoved", function(){window.location.reload();}, true); window.addEventListener("DOMNodeRemovedFromDocument", function(){window.location.reload();}, true); window.addEventListener("DOMSubtreeModified", function(){window.location.reload();}, true); } </script> </body> </html>
代码本身应该说没有什么问题,但是后面“通过监听页面元素变化来重新加载页面”的代码对于一些页面上有太多效果的网站获取会导致你的网站崩溃,比如我博客上因为设置了标题滚动(具体请看这篇文章:JavaScript 实现网站标题自定义、滚动、闪烁),这段代码就会监听到我博客上标题元素被修改,导致网站一遍遍的加载,最后的结果可想而知。。。所以说为了避免网站崩溃而又不影响网站美观我们只能退而求其次,只将以下代码复制到你主题的 footer.php 文件中去,或者任何你希望用户禁止查看控制台的页面中即可:
<script type='text/javascript'> //禁用右键(防止右键查看源代码) window.oncontextmenu=function(){return false;} //禁止任何键盘敲击事件(防止F12和shift+ctrl+i调起开发者工具) window.onkeydown = window.onkeyup = window.onkeypress = function () { window.event.returnValue = false; return false; } //如果用户在工具栏调起开发者工具,那么判断浏览器的可视高度和可视宽度是否有改变,如有改变则关闭本页面 var h = window.innerHeight,w=window.innerWidth; window.onresize = function () { if (h!= window.innerHeight||w!=window.innerWidth){ window.close(); window.location = "about:blank"; } } </script>
由于代码是 JavaScript 的,也就是说当用户浏览器禁止 JavaScript 的话代码会失效,不过对于提高一些恶意搞事情的难度还是有一定作用的。
评论 (9)
问一下 , 这种方法能避免在副f12 的状态下打开网页吗?
非常有用,感谢分享
不能打字了
谷歌浏览器地址栏后边那里可以弄出调试工具(浏览器菜单处)
控制台分离出页面就无效了
一般性防范还可以,如果真有人想搞事情,仅凭几行代码肯定不行。话又说回来了,就咱这小站,不值当的。
这个是正解!不过为什么我可以直接F12打开控制台(360极速浏览器-谷歌内核)?
是不是 JavaScript 被禁用了
没有啊,我用的360极速浏览器默认配置,并且我通过其他浏览器测试也是可以直接打开的。