阻止F12及Ctrl+Shift+I的JS脚本失效,如何修复?
解决阻止F12及Ctrl+Shift+I触发网页审查功能的问题
你的右键菜单阻止代码可以正常运行,但F12和Ctrl+Shift+I的拦截代码失效,核心问题有两个:
- 事件绑定名称错误:你写了
.keydown,正确的事件名是keydown(多余的点会导致事件无法触发) - 仅返回
false不足以在所有浏览器中阻止默认行为,需要显式调用阻止默认行为的API
以下是修正后的完整代码,同时补充了对其他常见审查快捷键的拦截(比如Mac端的Cmd+Opt+I、Ctrl+U查看源码等):
/** * Prevent users to inspect my website */ document.addEventListener("keydown", function (event) { // 阻止F12 if (event.keyCode === 123) { event.preventDefault(); event.stopPropagation(); event.returnValue = false; return false; } // 阻止Ctrl+Shift+I else if (event.ctrlKey && event.shiftKey && event.keyCode === 73) { event.preventDefault(); event.stopPropagation(); event.returnValue = false; return false; } // 阻止Ctrl+U(查看网页源码) else if (event.ctrlKey && event.keyCode === 85) { event.preventDefault(); event.stopPropagation(); event.returnValue = false; return false; } // 阻止Shift+F12 else if (event.shiftKey && event.keyCode === 123) { event.preventDefault(); event.stopPropagation(); event.returnValue = false; return false; } // 处理Mac端Cmd+Opt+I else if (event.metaKey && event.altKey && event.keyCode === 73) { event.preventDefault(); event.stopPropagation(); event.returnValue = false; return false; } }); // 阻止右键菜单 document.addEventListener("contextmenu", function (e) { e.preventDefault(); });
关键说明
- 修正事件名:把
.keydown改为keydown,确保事件能正常监听键盘操作 - 增强阻止逻辑:同时调用
preventDefault()、stopPropagation(),并设置returnValue = false,覆盖不同浏览器的默认行为处理机制 - 补充快捷键拦截:增加了对其他常见的审查/查看源码快捷键的拦截,提升拦截覆盖范围
注意:这类方法只能拦截普通用户的操作,无法完全阻止技术熟练的用户通过浏览器设置、调试工具直接启动等方式进入审查模式。
内容的提问来源于stack exchange,提问作者Carvel Russ Silvano
相关产品推荐
相关产品推荐

