最近,用Electron的频率有点高,毕竟这玩意,基本上所需要的语言都是前端的,本身就是搞这块的,所以上手还是很快的,但是还是遇到了一些问题,尤其的跨域的问题非常多,这里给大家好好讲讲。
首先跨域的原因,就是浏览器上有个同源策略,即同协议,同域名,同端口,更多这方面的资料可以,浏览浏览器的同源策略。
而在Electron中为什么会出现跨域呢,因为Electron内部就是嵌套了一个Chromium,精简版的谷歌浏览器,所以浏览器有的功能,Electron自然也有了,浏览器有安全的限制,Electron也有,反正就把Electron当作个套壳浏览器就对了。
那么到底怎么解决这个问题呢?
直接上代码吧。
//main.js const { app, BrowserWindow } = require('electron'); app.commandLine.appendSwitch('disable-site-isolation-trials');//这行一定是要加的,要不然无法使用iframe.contentDocument方法 mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { webSecurity: false,//关闭安全性功能,支持跨域请求 }, });
关于这条命令disable-site-isolation-trials
,在Github是有讨论,本来只要配置了webSecurity
这个选项就可以了,但是由于Electron的bug,所以才需要额外加这条命令。
相关的讨论,大家可以看:Unable to access iframe contentDocument when webSecurity disabled.