当我们在和产品打交道的时候,我们如何才能表现得比较从容,答案就是我们对浏览器得能力边界足够的了解,如果我们对技术不够了解产品就会怀疑我们的能力,从而有很多毫无意义的争论,有些产品提出一些超过能力边界的事情,我们可以理直气壮的直接说:做不了。
就比如说:他居然想让我们实现在浏览器端无感知的磁盘读写,就是那种用户不会感知到任何提示,然后他电脑就多了或者少了些文件。
之前我一直觉得在浏览器中使用javascript无法直接访问磁盘文件这一点和后端语言简直没法儿比,总显得js比较low的感觉,幸亏nodejs以及bun等运行时的出现弥补了这一缺陷。
但是javascript真的是不能读写磁盘么?它是故意而为之还是做不到呢?
首先声明一点,是跑在浏览器端javascript做不到,服务端的javascript还是很可以做到的。
很显然强大的chrome团队并不是做不到,而是不能这样做,而最重要的原因大家可能也猜的出来,是为了——安全性
因为javascript最初的设计就是运行在浏览器端的一种脚本语言,主要负责浏览器的交互和一些简单逻辑的执行,它的执行发生在客户端。
如果按照运行的环境来分类,那么这个世界上的编程语言分为两种,一种运行在客户端,一种运行在服务端。
我们的个人电脑、手机都是客户端,客户端会在全世界范围内搜索程序,然后下载下来,运行在自己的系统内。而服务端主要是提供下载的资源,编写提供的程序。那么我们就要解决下面的问题。
客户端如何保证自己的下载下来的程序是安全的呢?我们把不好的、对用户可能造成损害的软件称为病毒软件。
通常来讲,一个应用程序是用户在软件商城里面下载下来的,这就已经做了第一次过滤,因为病毒软件通常是很难进入商城的。
其次应用程序如果从互联网上下载下来的,我们的操作系统也会帮助我们检测软件是否合法,是否会侵害用户的隐私。如果不符合标准就会提示用户,甚至不允许安装。如果一个软件通过层层筛查,最终执行在我们的客户端上面,那么我们就基本上是信任这个软件的。如果通过了这么多筛选发现真的是个病毒软件,那么带来的损失将是这个用户自己承担。
浏览器被誉为操作系统上的操作系统,它打开一个应用程序的方式实在是太简单了,可能只需要在某个网页上点个链接,就完全有可能进入一个全新的web应用程序,因此对它的限制就需要严格一些。
大家想象一下,假设在浏览器环境下可以随意读写计算机的某一部分磁盘,那么如果有一个恶意的链接不小心一点,可能你电脑上的某个文件就突然没了,这种损失对于用户来说是无法估量的,因此浏览器对运行在其中的脚本做文件读写的限制是完全合理和应该的。
实际上不光是浏览器,其实几乎所有的客户端应用程序对磁盘读写都有一定的限制,由于我不是安卓开发,但是我问了一些专业的安卓开发人员,才知道安卓应用也是只能读写指定权限的磁盘文件。
Android应用需要在清单文件(
AndroidManifest.xml
)中声明适当的权限,以便访问设备上的文件系统。例如,如果应用需要读取外部存储(SD卡)上的文件,需要声明READ_EXTERNAL_STORAGE
权限。如果应用需要写入到外部存储,需要声明WRITE_EXTERNAL_STORAGE
权限。在Android 6.0(API级别23)及更高版本中,权限由运行时动态请求。 —— 大家扫一眼就行,因为我也是粘贴的百度的,