有啥方法可以检测到 Ctrl + S?

Posted

技术标签:

【中文标题】有啥方法可以检测到 Ctrl + S?【英文标题】:Is there any way to detect Ctrl + S?有什么方法可以检测到 Ctrl + S? 【发布时间】:2021-11-04 16:05:43 【问题描述】:

我需要编写一个不允许用户查看代码的页面。 为了捕捉上下文菜单打开,我想使用 JS 事件。要打开网络控制台,我想使用这个:https://sindresorhus.com/devtools-detect/ 并关闭页面。如何赶上储蓄?抓到Ctrl+S就够了吗?

【问题讨论】:

“我需要编写一个不允许用户看到代码的页面。” 那是不可能的。我可以下载并使用 wget、curl 或 Postman 分析您的代码。 即使你能捕捉到这些,想要获取代码的人也可以简单地从命令行使用curlwget。或者他们可以在浏览器访问页面时使用数据包捕获工具。 在标题中写 css 是有可能的,但它很古怪而且非常有限。 sindresorhus.com/devtools-detect 不适用于浮动开发工具。打开开发工具,打开右上角的菜单,选择浮动窗口。 @lith.al 请修正你的问题标题,看起来你不是在问如何检测ctrl+s 【参考方案1】:

不,捕获ctrl + s 只会解决用户使用键盘快捷键的情况(请务必记住它是 cmd+s 用于 Mac)。如果他们使用File Menu 或上下文菜单的“另存为”操作,他们仍将获得保存网页对话框。我从未听说过有什么方法可以诱捕它们。

你永远无法阻止用户看到你的代码,如果浏览器可以下载并执行它,用户就可以看到它,无论是通过curl、数据包嗅探器还是 DevTools。

您能做的最好的事情就是混淆您的代码,任何有足够技能的人都可以将其转换为非混淆代码。

【讨论】:

用户无法使用 curl。这是密码 @lith.al 如果用户可以在浏览器中打开一个 URL,同一个用户可以用 curl 打开同一个 URL 并查看代码。 @jabba 不。用户可以在浏览器中打开 URL 并查看密码表单。插入密码ajax更改页面后。在 curl 中是无法插入密码的。 @lith.al 用户可以嗅探网络,他们会知道您的 AJAX 请求/响应的内容,他们可以调用 curl。相信我,你在试图保护客户端的应用程序时陷入了困境,众所周知,如果有人决心阅读你的代码,这种方法就行不通 @lith.al 你将如何处理像 Puppeteer、Selenium 或 PhantomJS 这样的脚本浏览器?您只需打开网站,输入凭据并将当前代码存储在文件中,而无需打开 DevTools。您将如何处理 Chrome 和 Firefox 中的远程调试?我可以在一个浏览器中打开一个网站,并通过远程调试端口与另一个浏览器连接。该网站甚至不知道第二个浏览器,但第二个浏览器可以读取代码。这不是高级黑客。这绝对是基本的网络调试。【参考方案2】:

我们可以监听keydown。如果正在按下 ctrlKey 和 S 键,请执行此操作。 preventDefault 正在阻止打开保存页面对话框。

document.addEventListener('keydown', (e) => 
  if (e.ctrlKey && e.key === 's') 
    e.preventDefault();
    console.log('pressing ctrl+s')
  
);

但是阻止用户查看您的代码?那是一个不同的故事。我们可以检测到 Ctrl+S,但不能阻止他人看到您的代码。

【讨论】:

我想你错过了问题的重点:“如何捕捉保存?捕捉 Ctrl+S 就足够了吗?”我认为 OP 理解他们可以捕获 ctrl+s 但想知道他们是否可以阻止用户保存网页。最终,他们的目标是隐藏我们大多数人都无法理解的代码。 它没有回答问题,如果您删除代码以“教”用户如何捕获ctrl+s,我将删除反对票,但在这种情况下,您的回答并没有说太多我会删除它。

以上是关于有啥方法可以检测到 Ctrl + S?的主要内容,如果未能解决你的问题,请参考以下文章

在 UWP Javascript 中,有啥方法可以检测到辅助窗口已关闭?

使用 face-api.js 进行人脸检测后,有啥方法可以自动裁剪人脸?

数码相机中的人脸检测有啥作用?使用人脸对焦的技巧和方法是啥?

在控制台中检测 Ctrl + S

有啥方法可以检测一行文本上的划痕吗?

WebStorm设置eslint ctrl + s检测