是否可以删除“检查元素”?

Posted

技术标签:

【中文标题】是否可以删除“检查元素”?【英文标题】:Is it possible to remove "Inspect Element"? 【发布时间】:2015-04-25 18:24:44 【问题描述】:

是否可以通过 javascript 删除或禁用 Chrome 应用程序中的“检查元素”上下文菜单?

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

【问题讨论】:

你的意思是右键菜单? @David:是的,大卫和我刚刚通过使用 oncontextmenu="return false" 找到了解决方案。 Jep 非常真实!干得好 是的,通过网络应用,用户将总是能够看到源代码。您应该改用本机桌面应用程序 嗯,当你说他们不希望他们能够看到源代码时,你的意思是生成页面的代码吗?因为要向他们展示任何东西,您必须向他们发送 html。您可以选择使用最少的 javascript,因此所有内容都在服务器上生成,这对他们来说将是一个黑匣子(他们看不到那里发生了什么),但是要给他们一个网页,您必须向他们发送 HTML(除非您想使用 Flash 或 Java Applet 之类的插件,但即使这些插件也可以进行逆向工程、反编译等)。 【参考方案1】:

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

右击 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 和 Firefox 对其进行了测试。它符合我的要求。

右键点击

 <body oncontextmenu="return false">

按键

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;
  

【讨论】:

上述方法禁用了鼠标和键盘,但如果我去开发者工具并从那里检查会怎样。 还有一种方法——用户可以点击右上角的“...”菜单,选择“更多工具”,然后点击“开发者工具”。【参考方案2】:

可以通过右键单击来阻止用户打开上下文菜单,如下所示(javascript):

document.addEventListener('contextmenu', function(e) 
  e.preventDefault();
);

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

【讨论】:

但这只会阻止右键单击。有没有办法防止键盘快捷键? 请不要这样做。这对 Web 可访问性非常有害。即使这是问题所要求的,恐怕人们会将这个 sn-p 投入生产。【参考方案3】:

你不能。

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

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

// Disable inspect element
$(document).bind("contextmenu",function(e) 
  e.preventDefault();
);
$(document).keydown(function(e)
  if(e.which === 123)
    return false;

);

但如果用户想查看代码,他会以另一种方式进行。他只需要多一点时间。

简短:如果您不希望人们在他们的浏览器中获取某些内容,那么您首先不应该将其发送到他们的浏览器

【讨论】:

【参考方案4】:

有点可能。

    首先,使用ramakrishna's解决方案来屏蔽devtools快捷键。

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

    然后,最后,添加以下内容:

if (devtools.isOpen) 


    setInterval(() => 

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

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

    , 5);

或者这个:

if (devtools.isOpen) 
while (true) 
    console.log("access denied")


它基本上会使 DOM 过载,并且无法通过 devtools 与它进行交互。

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

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

【讨论】:

【参考方案5】:

虽然不是答案,但 Chrome 肯定有办法做到这一点,我似乎正在进行 A/B 测试,因为我的工作帐户无法在 Gmail 中检查,而我的个人帐户可以。

我已经搜索了&lt;meta&gt; 标签或可能控制这一点的 HTTP 标头,但没有什么特别突出

【讨论】:

这是控制帐户的组织(您的管理员),而不是网站。网站无法控制您是否可以检查元素。【参考方案6】:

不。您可以做的最接近的方法是捕获右键单击,并使它们不打开上下文菜单,但精明的用户会知道键盘组合或菜单选项无论如何都可以访问它,从而打败了这一点。这是浏览器的一项功能,因此您在页面中所做的任何事情都不会阻止它(除了在他们的计算机上安装恶意软件)。

【讨论】:

覆盖键盘击键:D 此外,您可以随时打开chrome://inspect【参考方案7】:

将此添加到页面的 html 标记中

<html oncontextmenu="return false">

【讨论】:

【参考方案8】:
document.addEventListener('keydown', function() 
    if (event.keyCode == 123) 
      alert("You Can not Do This!");
      return false;
     else if (event.ctrlKey && event.shiftKey && event.keyCode == 73) 
      alert("You Can not Do This!");
      return false;
     else if (event.ctrlKey && event.keyCode == 85) 
      alert("You Can not Do This!");
      return false;
    
  , false);
  
  if (document.addEventListener) 
    document.addEventListener('contextmenu', function(e) 
      alert("You Can not Do This!");
      e.preventDefault();
    , false);
   else 
    document.attachEvent('oncontextmenu', function() 
      alert("You Can not Do This!");
      window.event.returnValue = false;
    );
  

无 F12 无右键

嗨 我使用这个代码。 玩得开心♥

【讨论】:

【参考方案9】:

是的,有,上面的一些脚本成功禁用了一个,但不能关闭另一个,所以下面是上面的摘要。

document.addEventListener('contextmenu',(e)=>
    e.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 == '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;
  

用这个你就安全了,现在没人能盗取你的代码或者用js破解你的数据库了!

【讨论】:

【参考方案10】:
<script language="javascript">
document.onmousedown=disableclick;
status="Right Click Disabled";
function disableclick(event)

  if(event.button==2)
   
     alert(status);
     return false;    
   

</script>

【讨论】:

【参考方案11】:

如果它对任何人有帮助,可以通过向其添加样式 pointer-events: none; 来禁用单个元素的 Inspect Element。

如果你有任何元素纯粹是为了对齐子元素而必须重叠大面积更有用的元素,这将非常有用;它可以让您防止对齐器元素响应检查元素命令。

【讨论】:

他们总是可以打开开发工具并导航到“禁用”检查菜单的元素。 @Reality 这个技巧不是要阻止访问者检查元素(祝你好运),而是帮助开发人员让 Inspect Element 更好地挑选出你感兴趣的元素(您可以看到的)而不是一些可能与其重叠的大型不可见元素。 哦,是的。这真的帮助。有多少次我尝试选择一个元素,却得到了背景,哈哈。【参考方案12】:

你不能阻止它,但你可以阻止一些键:

将此添加到您的脚本中:

<script>
 
 document.addEventListener('contextmenu', function(e) 
  e.preventDefault();
 );
 document.addEventListener('keydown', function(e) 
 if (event.keyCode == 123) 
  return false;
 
 if (e.ctrlKey && e.shiftKey) 
  return false;
 
 if (event.ctrlKey && event.keyCode == 85) 
  return false;
 
);
/* other script code */
</script>

【讨论】:

【参考方案13】:

上面的答案是完美的,但是当按下 ctrl+shift+I 时有一些问题。在之前的答案中,它仍然会打开检查。通过添加 event.preventdefault() 解决这个问题

document.addEventListener('keydown', function() 
    if (event.keyCode == 123) 
      alert("You Can not Do This!");
      return false;
     else if (event.ctrlKey && event.shiftKey && event.keyCode == 73) 
      alert("You Can not Do This!");
       event.preventDefault();
      return false;
     else if (event.ctrlKey && event.keyCode == 85) 
      alert("You Can not Do This!");
      return false;
    
  , false);
  
  if (document.addEventListener) 
    document.addEventListener('contextmenu', function(e) 
      alert("You Can not Do This!");
      e.preventDefault();
    , false);
   else 
    document.attachEvent('oncontextmenu', function() 
      alert("You Can not Do This!");
      window.event.returnValue = false;
    );
  

【讨论】:

【参考方案14】:

是的,可以停止在浏览器中检查网站。 如您所知,有三种方法可以在浏览器中检查网站

    使用键盘快捷键 使用右键单击 使用浏览器的开发者菜单

我有 1 和 2 方式的解决方案,这里是 JavaScript 代码 但是用户用户第三种方式是非常罕见的情况

// take body to change the content
const body = document.getElementsByTagName('body');
// stop keyboard shortcuts
window.addEventListener("keydown", (event) => 
  if(event.ctrlKey && (event.key === "S" || event.key === "s")) 
     event.preventDefault();
     body[0].innerHTML = "sorry, you can't do this ?"
  

  if(event.ctrlKey && (event.key === "C")) 
     event.preventDefault();
     body[0].innerHTML = "sorry, you can't do this ?"
  
  if(event.ctrlKey && (event.key === "E" || event.key === "e")) 
     event.preventDefault();
     body[0].innerHTML = "sorry, you can't do this ?"
  
  if(event.ctrlKey && (event.key === "I" || event.key === "i")) 
     event.preventDefault();
     body[0].innerHTML = "sorry, you can't do this ?";
  
  if(event.ctrlKey && (event.key === "K" || event.key === "k")) 
     event.preventDefault();
     body[0].innerHTML = "sorry, you can't do this ?";
  
  if(event.ctrlKey && (event.key === "U" || event.key === "u")) 
     event.preventDefault();
     body[0].innerHTML = "sorry, you can't do this ?";
  
);
// stop right click
document.addEventListener('contextmenu', function(e) 
  e.preventDefault();
);

【讨论】:

【参考方案15】:

试试这个:

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;

if(e.ctrlKey && e.keyCode == 'C'.charCodeAt(0))
    return false;

if(e.ctrlKey && e.keyCode == 'X'.charCodeAt(0))
    return false;

if(e.ctrlKey && e.keyCode == 'Y'.charCodeAt(0))
    return false;

if(e.ctrlKey && e.keyCode == 'Z'.charCodeAt(0))
    return false;

if(e.ctrlKey && e.keyCode == 'V'.charCodeAt(0))
    return false;

if (e.keyCode == 67 && e.shiftKey && (e.ctrlKey || e.metaKey))
    return false;

if (e.keyCode == 'J'.charCodeAt(0) && e.altKey && (e.ctrlKey || e.metaKey))
    return false;

if (e.keyCode == 'I'.charCodeAt(0) && e.altKey && (e.ctrlKey || e.metaKey))
    return false;

if ((e.keyCode == 'V'.charCodeAt(0) && e.metaKey) || (e.metaKey && e.altKey))
    return false;

if (e.ctrlKey && e.shiftKey && e.keyCode == 'C'.charCodeAt(0))
    return false;

if(e.ctrlKey && e.keyCode == 'S'.charCodeAt(0))
    return false;

if(e.ctrlKey && e.keyCode == 'H'.charCodeAt(0))
    return false;

if(e.ctrlKey && e.keyCode == 'A'.charCodeAt(0))
    return false;

if(e.ctrlKey && e.keyCode == 'F'.charCodeAt(0))
    return false;

if(e.ctrlKey && e.keyCode == 'E'.charCodeAt(0))
    return false;


if (document.addEventListener) 
    document.addEventListener('contextmenu', function(e) 
    e.preventDefault();
    , false);
else
    document.attachEvent('oncontextmenu', function() 
    window.event.returnValue = false;
    );

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案16】:

很简单,只需按F6,然后按F12

【讨论】:

【参考方案17】:

如果您想在 Chrome 中检查网页而不使用:

按任意键 使用开发工具 特殊的 Chrome 扩展程序

您可以在BEFORE进入页面之前按f12。

【讨论】:

以上是关于是否可以删除“检查元素”?的主要内容,如果未能解决你的问题,请参考以下文章

检查元素是不是有css动画

检查元素是不是对用户真正可见

使用jQuery检查元素是否为“display:none”或单击时阻止

检查元素在硒中是不是可点击

检查 HTML 元素是不是有滚动条

检查元素在 DOM 中是不是可见