前端页面如何限制用户打开浏览器控制台详解

 更新时间:2026年03月11日 09:53:55   作者:JYeontu  
在前端开发中禁用浏览器控制台并非一个推荐的做法,且从技术上讲无法完全阻止用户打开控制台,然而如果你有特殊需求或想要增加一些障碍来阻止普通用户轻易地打开控制台,这篇文章主要介绍了前端页面如何限制用户打开浏览器控制台的相关资料,需要的朋友可以参考下

说在前面

作为一名开发,相信大家对于浏览器控制台都是不陌生的,平时页面一出问题第一反应总是先打开控制台看看报错信息,而且还可以在控制台里插入自己的脚本信息来修改页面逻辑,那么你有没有想过 怎么限制用户打开控制台 呢?

禁用右键菜单 

在页面上点击鼠标右键我们可以看到有个 检查 选项,通过这个菜单可以直接打开控制台,我们可以直接在这个页面上禁用右键菜单。

document.addEventListener("contextmenu", e => e.preventDefault());  

加上这段代码后用户在页面上点击右键就不会有反应了。

拦截快捷键

除了右键菜单栏,还有最经典的 F12 ,通过 F12 快捷键也可以快速打开控制台,所以我们也可以将这个快捷键给拦截掉

document.addEventListener("keydown", e => {  
  if (e.keyCode === 123) {
    e.preventDefault();  
  }  
});

那么除了 F12 你知道还有什么快捷键可以打开控制台吗?

  • Ctrl+Shift+C
  • Ctrl+Shift+I

上面这两个快捷键也可以打开控制台,还有一个快捷键 Ctrl+U 可以打开源码页面,这里我们也可以一起把它给拦截掉。

document.addEventListener("keydown", e => {  
  if (e.keyCode === 123 ||               // F12  
      (e.ctrlKey && e.shiftKey && e.keyCode === 67) || // Ctrl+Shift+C  
      (e.ctrlKey && e.shiftKey && e.keyCode === 73) || // Ctrl+Shift+I  
      (e.ctrlKey && e.keyCode === 85)) { // Ctrl+U  
    e.preventDefault();  
  }  
});  

加上这段代码后用户在页面上按下这些快捷键就不会有反应了。

检测窗口变化

加上前面的拦截之后,其实我们还是有办法打开控制台,可以通过浏览器设置来打开控制台,这里的入口我们并无法监听拦截到

let lastWidth = window.innerWidth;
let lastHeight = window.innerHeight;

window.addEventListener("resize", () => {
  const widthDiff = Math.abs(window.innerWidth - lastWidth);
  const heightDiff = Math.abs(window.innerHeight - lastHeight);

  // 如果窗口尺寸变化但不是全屏切换,可能是控制台打开
  if ((widthDiff > 50 || heightDiff > 50) && !isFullScreen()) {
    //跳转到空白页面
    window.location.href = "about:blank";
    alert("检测到异常窗口变化,请关闭开发者工具");
  }
  lastWidth = window.innerWidth;
  lastHeight = window.innerHeight;
});

function isFullScreen() {
  return (
    document.fullscreenElement ||
    document.webkitFullscreenElement ||
    document.msFullscreenElement
  );
}

通常默认是会在页面内靠边打开控制台,所以可以通过监听页面大小变化来简单判断是否打开控制台,监听到打开后直接跳转到空白页面。

但是还有这么两种情况

  • 全屏切换时的尺寸变化可能被误判
  • 独立打开控制台页面时无法监听到

无限Debugger

我们还可以通过 Function("debugger") 来动态生成断点(动态生成是为了防断点禁用),通过无限循环生成断点,让页面一直处于断点状态。

(() => {  
  function block() {  
    setInterval(() => {  
      (function(){return false;})["constructor"]("debugger")["call"]();  
    }, 50);  
  }  
  try { block(); } catch (err) {}  
})();  

虽然我们可以通过一些技术手段,给用户打开控制台设置一些障碍,但对于经验老到的用户而言,绕过这些限制并非难事。依赖前端技术拦截控制台访问是一种典型的“防君子不防小人”策略,不能想着靠这些手段来保障自己网站的安全。

总结

到此这篇关于前端页面如何限制用户打开浏览器控制台的文章就介绍到这了,更多相关前端限制用户打开浏览器控制台内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js的touch事件的实际引用

    js的touch事件的实际引用

    研究移动端页面的触屏滑动事件,搜索jquery 的相应技术支持实在繁琐,而js只需几步简单定义即可,下面与大家分享下js的touch事件的实际引用
    2014-10-10
  • JS获取各种浏览器窗口大小的方法

    JS获取各种浏览器窗口大小的方法

    本篇文章主要是对JS 获取各种浏览器窗口大小的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • js模拟jquery的slide和fadeIn和fadeOut功能

    js模拟jquery的slide和fadeIn和fadeOut功能

    以前用过jquery的slideUp,slideDown,等许多很不错的方法,感觉很容易就能实现页面元素的动画效果!
    2010-07-07
  • 详解JavaScript什么情况下不建议使用箭头函数

    详解JavaScript什么情况下不建议使用箭头函数

    箭头函数作为ES6新增的语法,在使用时不仅能使得代码更加简洁,而且在某些场景避免this指向问题。但是箭头函数不是万能的,也有自己的缺点以及不适用的场景,本文总结了JavaScript什么情况下不建议使用箭头函数,感兴趣的可以了解一下
    2022-06-06
  • TypeScript判断对象类型的4种方式代码

    TypeScript判断对象类型的4种方式代码

    这篇文章主要给大家介绍了关于TypeScript判断对象类型的4种方式代码,TypeScript能根据一些简单的规则推断(检查)变量的类型,你可以通过实践很快的了解它们,需要的朋友可以参考下
    2023-07-07
  • ExtJs使用自定义插件动态保存表头配置(隐藏或显示)

    ExtJs使用自定义插件动态保存表头配置(隐藏或显示)

    这篇文章主要介绍了ExtJs使用自定义插件动态保存表头配置(隐藏或显示) ,需要的朋友可以参考下
    2018-09-09
  • 用Javascript实现Windows任务管理器的代码

    用Javascript实现Windows任务管理器的代码

    在Windows系统上,自从98系统以来就提供了脚本宿主(Windows Scripting Host 简称WSH)的功能,WSH可以加载并运行JS和VBS脚本,并支持调用系统的COM组件,在COM组件的支持下脚本可以轻松实现非常强大的功能
    2012-03-03
  • uni-app实现web-view图片长按下载解决方案

    uni-app实现web-view图片长按下载解决方案

    uniapp的web-view中图片无法长按保存,IOS下是正常的,但是Android下长按无反应,这篇文章主要介绍了uni-app实现web-view图片长按下载解决方案,需要的朋友可以参考下
    2023-09-09
  • JS使用setInterval实现的简单计时器功能示例

    JS使用setInterval实现的简单计时器功能示例

    这篇文章主要介绍了JS使用setInterval实现的简单计时器功能,涉及javascript基于setInterval的定时触发与数值运算相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • 解决eclipse中没有js代码提示的问题

    解决eclipse中没有js代码提示的问题

    今天小编就为大家分享一篇解决eclipse中没有js代码提示的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10

最新评论