是否可以删除"检查元素"?

Kim*_*dez 10 javascript google-chrome google-chrome-app

是否可以通过Javascript删除或禁用Chrome应用中的"Inspect Element"上下文菜单?

我搜索了几个论坛,但没有明确的答案.

小智 16

我对一个页面有一个要求.在该页面中,我想阻止用户执行以下操作,

  • 右键点击
  • F12
  • Ctrl + Shift + I
  • Ctrl + Shift + J.
  • Ctrl + Shift + C.
  • Ctrl + U.

为此我用Google搜索,最后得到以下链接,

http://andrewstutorials.blogspot.in/2014/03/disable-ways-to-open-inspect-element-in.html

我测试了Chrome浏览器和fire foz.它符合我的要求.

右键点击

 `<body oncontextmenu="return false;">`
Run Code Online (Sandbox Code Playgroud)

按键

document.onkeydown = function(e) {
  if(event.keyCode == 123) {
     return false;
  }
  if(e.ctrlKey && e.shiftKey && e.keyCode == 'I'.charCodeAt(0)) {
     return false;
  }
  if(e.ctrlKey && e.shiftKey && e.keyCode == 'C'.charCodeAt(0)) {
     return false;
  }
  if(e.ctrlKey && e.shiftKey && e.keyCode == 'J'.charCodeAt(0)) {
     return false;
  }
  if(e.ctrlKey && e.keyCode == 'U'.charCodeAt(0)) {
     return false;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 还有一种方式——用户可以点击右上角的“...”菜单,选择“更多工具”,然后点击“开发者工具”。 (8认同)
  • 上面的方法禁用了鼠标和键盘,但是如果我转到开发人员工具并从那里检查该怎么办。 (3认同)

Gui*_*ume 8

可以通过这样右键单击来防止用户打开上下文菜单(javascript):

document.addEventListener('contextmenu', function(e) {
  e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

通过侦听contextmenu事件并阻止默认行为“显示菜单”,该菜单将不会显示。但是用户仍然可以通过控制台检查代码(例如,通过按Chrome中的F12键)。

  • 请不要这样做。这对于网络可访问性来说非常有害。即使这是问题所要求的,恐怕人们也会将此片段投入生产。 (3认同)

Pos*_*hin 7

这是可能的。

  1. 首先,使用ramakrishna的解决方案来阻止devtools快捷键。

  2. devtools-detect添加到您的网站。这是来自他的 github 的devtools.js文件的快速链接。

  3. 最后,添加以下内容:

if (devtools.isOpen) {


    setInterval(() => {

        var $all = document.querySelectorAll("*");

        for (var each of $all) {
            each.classList.add(`asdjaljsdliasud8ausdijaisdluasdjasildahjdsk${Math.random()}`);
        }
        

    }, 5);
}
Run Code Online (Sandbox Code Playgroud)

或者也许是这样的:

if (devtools.isOpen) {
while (true) {
    console.log("access denied")
}
}
Run Code Online (Sandbox Code Playgroud)

它基本上会使 DOM 过载,并使其无法通过开发工具与其交互。

另外,这只是一个例子;您可以使用更复杂的方法来重载 DOM,而不仅仅是添加类。

我不认为它会完美地工作,但它应该足以提供至少一些额外的小层“安全”。


小智 6

你不能。

网页上的所有内容都由浏览器呈现,他们希望网站能够正常工作,否则用户会鄙视他们。因此,浏览器希望使用代码检查器等工具向 Web 开发人员公开所有内容的较低级别的滴答声。

您可以尝试阻止用户通过按键事件进入菜单。像这样的东西:

// Disable inspect element
$(document).bind("contextmenu",function(e) {
  e.preventDefault();
});
$(document).keydown(function(e){
  if(e.which === 123){
    return false;
}
});
Run Code Online (Sandbox Code Playgroud)

但是如果用户想看到代码,他会用另一种方式来做。他只需要一点时间。

简而言之:如果您不希望人们在他们的浏览器中获得某些内容,则首先不应将其发送到他们的浏览器


小智 5

  

 "put this script before ending your body tag"

 <script> 
      document.addEventListener('contextmenu', event=> event.preventDefault()); 
      document.onkeydown = function(e) { 
      if(event.keyCode == 123) { 
      return false; 
      } 
      if(e.ctrlKey && e.shiftKey && e.keyCode == 'I'.charCodeAt(0)){ 
      return false; 
      } 
      if(e.ctrlKey && e.shiftKey && e.keyCode == 'J'.charCodeAt(0)){ 
      return false; 
      } 
      if(e.ctrlKey && e.keyCode == 'U'.charCodeAt(0)){ 
      return false; 
      } 
      } 
      </script> 
Run Code Online (Sandbox Code Playgroud)