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

 更新时间: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) {}  
})();  

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

总结

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

相关文章

  • Knockoutjs的环境搭建教程

    Knockoutjs的环境搭建教程

    最近要在项目中使用Knockoutjs,因此今天就首先研究了一下Knockoutjs的环境搭建,并进行了一个简单的测试,需要的朋友可以了解下
    2012-11-11
  • JavaScript+CSS实现唯美蝴蝶动画

    JavaScript+CSS实现唯美蝴蝶动画

    这篇文章主要介绍了JavaScript+CSS实现唯美蝴蝶动画,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • JavaScript 中传递参数的方式

    JavaScript 中传递参数的方式

    在 JavaScript 中,参数传递的方式可以分为基本类型的传值和复杂类型的引用传递,根据使用场景和需求,不同的参数传递方式可能会有所差异,本文介绍JavaScript 中传递参数的方式,感兴趣的朋友一起看看吧
    2025-01-01
  • javascript日期对象格式化为字符串的实现方法

    javascript日期对象格式化为字符串的实现方法

    本篇文章主要是对javascript日期对象格式化为字符串的实现方法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • 人人网javascript面试题 可以提前实现下

    人人网javascript面试题 可以提前实现下

    JavaScript面试题要求:以下题目必须从一至四题中,选出三道题,使用原生代码实现,不可使用任何框架,第五题为选作题
    2012-01-01
  • typescript 将数组清空的方法实现

    typescript 将数组清空的方法实现

    在开发应用程序时,数组常用于存储多个元素(如数字、字符串、对象等),然而,在某些场景下,你可能需要将数组清空,本文主要介绍了typescript 将数组清空的方法实现,感兴趣的可以了解一下
    2024-08-08
  • 学习javascript文件加载优化

    学习javascript文件加载优化

    这篇文章主要为大家详细介绍了javascript文件加载优化,三种方式实现js文件加载优化,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • JavaScript断言与类型守卫及联合声明超详细介绍

    JavaScript断言与类型守卫及联合声明超详细介绍

    这篇文章主要介绍了JavaScript断言与类型守卫及联合声明,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-11-11
  • jQuery多项选项卡的实现思路附样式及代码

    jQuery多项选项卡的实现思路附样式及代码

    这篇文章主要介绍了jQuery多项选项卡的实现思路,需要的朋友可以参考下
    2014-06-06
  • javascript event在FF和IE的兼容传参心得(绝对好用)

    javascript event在FF和IE的兼容传参心得(绝对好用)

    event在IE和FF不兼,下面为大家分享的是javascript event在FF和IE的兼容传参心得,需要的朋友可以参考下
    2014-07-07

最新评论