隔离世界与主世界
这是 Chromium 在同一份文档上提供的多个 JavaScript 环境。Electron 的上下文隔离使用了和扩展内容脚本相同的机制。
- 主世界(Main World):页面自己的脚本所在的世界。
contextBridge.exposeInMainWorld的名字就表示把 API 放到这个世界的window上。世界 id 是0。 - 隔离世界(Isolated World):预加载脚本所在的世界。它有自己的全局对象和内置原型。Electron 为上下文隔离保留的世界 id 是
999。自定义隔离世界从1000起。
两个世界看见的 DOM 是同一棵树,所以预加载脚本可以查询页面元素。它们看不见对方的全局变量。
开发者工具 Console 顶部的上下文下拉框里,可以切到 Electron Isolated Context,在预加载脚本的世界里执行表达式。
webFrame.executeJavaScriptInIsolatedWorld(worldId, scripts) 在指定世界执行代码。传入 0 就和在页面主世界执行相同。