Electron应用程序类似于任何其他桌面应用程序。它们与您的其他本机应用程序一起位于文件系统中。它们位于macOS的dock中,或者Windows和Linux的任务栏中,其他本地应用程序都挂在那里。Electron应用程序可以触发本机打开和保存文件对话框。可以将这些对话框配置为允许操作系统只选择具有特定文件扩展名的文件、整个目录或多个文件。你可以拖拽文件到Electron应用程序并触发不同的操作。
此外,Electron应用程序可以像其他应用程序一样设置自定义应用程序菜单。参见图1.5。它们可以创建自定义上下文菜单,当用户从应用程序中右键单击时,这些菜单就会立即生效。您可以使用Chromium的通知API来触发系统级的通知。它们还可以从系统剪贴板中读取数据,并将文本、图像和其他媒体写入剪贴板。
图1.5 Electron允许您创建自定义应用程序菜单
与传统的web应用程序不同,电子应用程序并不局限于浏览器。您可以在菜单栏或系统托盘中创建应用程序。参见图1.6。您甚至可以注册全局快捷方式来触发这些应用程序或它们的任何功能,只需在操作系统中的任何位置进行特殊的击键。
图1.6 您可以在操作系统的菜单栏或系统托盘中创建一个应用程序。
Electron应用程序可以访问系统级的信息,比如计算机是处于电池供电状态还是正在充电。如果有必要,它们还可以让操作系统保持亮屏,防止它进入节电模式。
增强权限和宽松限制
web是历史上最大的分布式应用程序平台。它是如此普遍,以至于web开发人员将许多相关的头痛视为理所当然。构建web应用程序需要精心设计服务器端之间的通信应用程序和潜在的数千个客户端应用程序实例。客户端代码运行在用户的web浏览器中——远离服务器。
客户机中发生的任何事情对于浏览器会话都是唯一的,除非更改被发送回服务器。同样,如果您的端发生了任何更改,您必须等到客户机发送另一个HTTP请求更新;或者,如果在客户机和服务器上都实现了该功能,则可以通过WebSockets发送更新。
桌面应用程序具有更广泛的功能,并且由于用户显式地下载、安装和打开应用程序,所以对它们所能做的限制更少。然而,当你在浏览网页时,您正在执行没有选择安装在计算机上的代码。因此,web应用程序在它们被允许做的事情上有很多限制。
当浏览器访问web上的一个页面时,它会很高兴的加载所有HTML代码文档,以及这些代码添加的任何附加依赖项,然后开始执行代码。多年来,浏览器厂商对浏览器的功能进行了限制,以防止恶意代码对用户或internet上的其他站点造成伤害。
我不是个坏人!但是为了便于讨论,假如我是。假设我运行一个流行的站点,它销售手工制作的小部件。有一天,一个竞争对手突然出现在我的雷达上,他以同样高的折扣出售并且优良的小部件。我的网站同样还是受欢迎的,但是这个新的挑战者难以睡眠。作为一个坏人,我决定将JavaScript添加到我的网站中,该网站每隔几毫秒就向竞争对手的网站发出一次AJAX请求,希望访问我网站的数千名访问者能够下载这段代码,从而有效地击溃竞争对手的服务器,使其无法处理任何合法的请求。这也会降低访问者在我网站上的体验,但这是我愿意付出的代价让竞争对手的网站变得崩溃。
尽管我的计划具有恶魔般的性质,但它行不通。现代浏览器限制客户端代码向第三方服务器发出请求,除非该服务器明确声明允许此类请求。
一般来说,大多数网站不会这样做。如果您想向第三方服务器发送请求,那么您必须先向您自己的服务器发出请求,让它与第三方,并将结果转发给客户端。如前面的示例描述,这增加了我的服务器瓶颈对那些成千上万的请求,这将使我推出这类攻击变得不可行。非常简单的原理,对于我的竞争对手只需屏蔽我单一的服务器地址而不是来我的网站的成千上万游客的IPs。