Electron中 preload.js 是否可以认为就只有在 BrowserWindow 这里使用到?

A BrowserWindow's preload script runs in a context that has access to both the HTML DOM and a limited subset of Node.js and Electron APIs.

请问下

1.Electron中 preload.js 是否可以认为就只有在 BrowserWindow 这里使用到?
2.这里的权限指的是 完全 HTML DOM 权限 + 部分node.js + 部分Electron API 还是 完全 HTML DOM 权限 + 部分node.js + 完全Electron API
3.部分的话,具体是哪些权限呢?

阅读 2.4k
1 个回答

首先官方对于preload的解释链接在这Preload 脚本

Electron中 preload.js 是否可以认为就只有在 BrowserWindow 这里使用到?

官方文档的解释如下⬇️⬇️

因为预加载脚本与浏览器共享同一个全局 Window 接口,并且可以访问 Node.js API,所以它通过在全局 window 中暴露任意 API 来增强渲染器,以便你的网页内容使用。

此功能对两个主要目的來說非常有用:

通过暴露 ipcRenderer 帮手模块于渲染器中,您可以使用 进程间通讯 ( inter-process communication, IPC ) 来从渲染器触发主进程任务 ( 反之亦然 ) 。
如果您正在为远程 URL 上托管的现有 web 应用开发 Electron 封裝,则您可在渲染器的 window 全局变量上添加自定义的属性,好在 web 客户端用上仅适用于桌面应用的设计逻辑 。

结合以上的两点官方的解释,可以理解为只在BrowserWindow中使用。

这里的权限指的是 完全 HTML DOM 权限 + 部分node.js + 部分Electron API 还是 完全 HTML DOM 权限 + 部分node.js + 完全Electron API? 部分的话,具体是哪些权限呢?

你这个问题我不是很明白你有什么需求下你会有这种问题?

我说说我对于这个preload.js的理解吧。本质上这个脚本你可以理解为你项目中的一个类似于油猴插件注入的一个脚本。它的优先级很高,它和你本身的网页项目共用一个window对象,它的window对象和网页的window可能会有属性冲突。

预加载(preload)脚本包含了那些执行于渲染器进程中,且先于网页内容开始加载的代码 。 这些脚本虽运行于渲染器的环境中,却因能访问 Node.js API 而拥有了更多的权限。

给予以上官方的解释,它应该是可以访问所有node的api。想想node后端能干嘛它也就能干嘛,但是我觉得它毕竟运行在electron这个容器中,所以类似于读取文件什么的估计还是得依赖electron的api来操作。你可以把electron作为一个小型虚拟机,只安装了一个node和chrome浏览器。如果透过这个模拟器来操作计算机上的东西得使用electron提供的方法。至于HTML DOM 权限估计拿不到,因为这个脚本是在页面安全加载之前注入的。

拙见 拙见

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题