为什么JavaScript无法直接获取用户电脑的硬件信息?

哈哈,你的问题很具体。
事实上,JavaScript 基本上不可能直接检索用户的计算机信息。
主要原因是浏览器功能太强大,为了安全起见它会一直卡在你身边。

想一想,浏览器是一个开放的平台,有很多网站,浏览器本身并不能保证有一个好的网站。
如果允许JS随意访问设备,那岂不是等于给不良网站开了后门?可以更改摄像头、麦克风和系统设置。
浏览器制造商应该承担多少责任?她不想冒这个风险。

我之前在2 02 3 年做过一个网页项目,本来想用JS来检查用户的CPU型号来提高性能,但是发现没有办法检查这个。
后来我想出了一个折中的办法,就是用Electron来封装一个小程序。
这样,您就可以使用 Node.js 的操作系统模块来根据需要验证硬件。
不过这个东西要用户手动安装,有点困难。
另一种方式是创建本地服务,比如用Python写一个监听器,用JS通过fetch来设置。
这个过程比较复杂,因为用户必须自己启动服务并打开防火墙端口。

归根结底,浏览器阻止JS获取硬件信息是出于最小权限原则。
地理位置、摄像头、麦克风等需要用户同意。
对于设备信息,浏览器认为它们无法通过简单的授权来保证安全,例如防止用户错误地同意让不良网站进行设备指纹识别。
所以就放手吧。

如果你坚持使用,你必须使用电子或本地服务,但你必须控制安全方面。
不管怎样,我建议你看看是否有替代方案,比如使用 CSS 功能或用户行为数据来模拟硬件差异,或者根本不做这个功能。
我还在思考这个问题,你可以看出来。

javascript怎么读取本地文件?

浏览器不允许JS直接读取本地文件。
用户上传文件后,JS可以获取文件对象。
文件对象包含文件名和大小等元数据。
使用 FileReaderAPI 读取文件内容。
创建一个 FileReader 实例并调用 readAsDataURL。
readAsDataURL 将文件转换为数据 URL。
监听上传事件,该事件在文件成功读取后触发。
执行上传事件处理函数,获取数据URL。
要获取文本内容,请使用 FileReader 结果属性。
结果属性返回文件的原始字符串。
由于同源策略限制,只能读取同源文件。
大文件上传影响性能,需要优化。
用户上传是前提,File和FileReader是关键。

使用本地HTML文件运行JavaScript脚本失败的原因及解决方案

说到使用本地HTML文件来运行JavaScript脚本,我其实是有一些经验的。
记得我在前端开发的时候经常遇到这样的问题。
有时我真的很困惑,不知道如何解决。

说实话,失败最常见的原因是浏览器安全策略限制,另一个是路径解析问题。
这两个问题比一个更令人烦恼。

我们先来说说安全策略限制。
就好像浏览器给你设置了一个小检查点,防止你的脚本随意调用其他资源。
例如,如果您使用 file:/// 协议打开本地文件,浏览器可能会将您的文件视为特殊域,并限制您的 JavaScript 加载其他本地资源,例如子目录中的脚本或 API 调用。
我当时就遇到了这样的情况。
我使用 fetch() 加载本地 JSON 文件,但失败了。

我们来谈谈相对路径解析问题。
就好像我在地图上找不到路一样。
如果JavaScript文件和HTML文件不在同一目录或子目录中,直接引用HTML文件中的脚本时,可能会因路径错误而导致上传失败。
我以前也犯过这个错误。
脚本和HTML不在同一个目录下,所以无法执行。

那么如何解决这些问题呢?首先,您可以尝试使用本地网络服务器。
这就像在浏览器中打开一个小后门来绕过这些安全限制。
例如,您可以使用 Node.js http 服务器。
安装后,运行命令,然后在浏览器中访问指定地址,问题就解决了。

另外,还需要注意脚本是如何引入的。
我喜欢将 [xss_clean] 标记放在 HTML 文件的开头,但我发现有时无法加载脚本。
后来我发现,通过将 [xss_clean] 标签放在 <body> 末尾或使用 defer/async 属性,脚本不会阻止页面的渲染。

如果你想引入第三方库,比如jQuery或者p5 .js,也可以使用CDN。
就像去超市买产品直接从网上下载一样,方便又省心。

当然你要检查一下代码,看看有没有错误。
我以前见过他。
如果未定义变量,则脚本将不会运行。
此时,您需要打开浏览器的开发者工具并查看控制台中的错误消息。

一般情况下,使用本地 HTML 文件运行 JavaScript 脚本时可能会遇到一些问题,但只要掌握了这些解决方案,问题就不大。
记得先使用Web服务器,检查脚本引入方法和代码错误,这样你的开发环境才能安全可靠。