背景
新手使用electron 会遇遇到自己的html页面加载的Js无法使用node js功能,Preload加载干什么,上下文隔离的问题,这个对于我使用electron确实造成困扰。
关键词
- nodeIntegration
- preload
- contextIsolation
详解
nodeIntegration
控制渲染进程加载页面是否能够调用node js功能,高版本默认关闭,意思就是加载的html是无法使用node js代码,如果你想用就必须设置 nodeIntegration 为 true。
preload
可以设置加载js,这个页面没有加载前就可以被调用,感觉可以用拦截器来用,具备nodejs 能力,不管nodeIntegration是否打开
contextIsolation
上下文隔离,具体是值proload 加载JS与加载普通的浏览器的dom的隔离,如果不隔离,普通页面和Preload js共享 window对象,你可以在preload js 设置 window.test = 1 ,那么普通页面页可以访问这个。在electron 12后就默认隔离上下文
为什么要这么多限制,对我们新手太不友好了?
如果你只是加载本地文件,那么全部打开都没有关系,防止你加载第三方页面导致安全问题,比喻你electron加载一个https://www.xxx.com 结果这个页面加一段electron 检测代码,然后执行恶意代码,由于你开启了nodeIntegration ,那么代码就可以跑起来。这么多限制防你引用第三方的页面,而不是开发者。但对于新手来说,可能就会带来一点门槛。
总结
按照官方的意思:preload + nodeIntegration【关闭】 + contextIsolation【开启】+普通页面开发,这样子比较安全。我感觉这样子开发有另外的好处,前端页面通用,跟node 弱关系,前端没有node js,通过proload导出函数或者对象即可。