我行我素,总有自挖坑的时候
序:
- 谨为记录一些当下可能需要注意的事项,让我疲倦的是,有些注意真的是曲线行车,每当此时很希望能掌控规则,奈何这么多事,一人何以责全,罢了罢了,强迫症而已
事项:
1. 官方API演示Demo模板 截至目前当前版本仍为7.2.4,里面的写法有些和最新的已不同,比如渲染进程调用ipcRenderer不变,但是主进程调用ipcMain已经移至remote对象,使用时需要注意,其实最好就是看你当前使用的electron版本的官方文档为佳,包括我现在说的这些,到了不同版本又可能会不一致
2. 10.X版本的electron在Chromium运行时require的electron版本缺失很多重要的对象,比如remote,仅暴露重要的ipcRenderer,本系列依然以9.X版本为主,此版本依然可以取得ipcMain等对象而非必须在node运行时下,至于10.X版本为啥出现这种情况,尚未去了解,感兴趣的可以研究下,不过不影响主进程这些对象的使用,毕竟这些版本没变的依然是订阅发布事件模式,9.x调用remote会有以下警告(当然此系列不会因为这个放弃这种调用方式,其实仅仅是希望应用拥有H5的快速UI构建能力以及掌控pc平台的原生api能力而已)
The 'remote' module is deprecated and will be disabled by default in a future version of Electron. To ensure a smooth upgrade and silence this warning, specify {enableRemoteModule: true} in the WebPreferences for this window.
3. ipcMain和ipcRenderer的on事件中listener的参数args不能为function,字符串和对象均可,为function时的错误信息如下:
An object could not be cloned
4. 新建窗口的方法有如下:
4.1.0 BrowserWindow
4.1.1 window.open(本质还是BrowserWindow,仅仅为覆盖了Chrome内置的window.open)
4.2 注意model模式的窗口,调用新建都仅仅为刷新一开始那个model窗口并不会像其他形式的是新建窗口,也即是整个electron应用有此仅有一个model窗口
5. remote.getGlobal方法,仅仅能获取到node环境下的全局变量,但是当对获得后的变量赋值时,并不能改变node环境对应的全局变量,仅仅在再次使用该方法获取的仅为当前Chromium环境对应的临时变量,故想修改node环境的全局变量还是需要采用事件方式通知主进程设置对应的全局变量
vue相关事项:
1. 关于electron应用的全局变量,在使用vuex时,你需要理解这个东西仅在一个vue生命周期内有效,多个vue不存在这个,比如在浏览器多个tab下,当你试图去改变vuex中的值时,每个tab的vue实例都是维持自身的vuex,并不会对彼此有所影响,那electron也是一样,多个窗口加载的vue实例,也是互相不影响,但是很多情况下,我是希望能有个全局变量去使得多窗口共享的,虽然可以使用postMessage来向指定或者全部窗口发送变量,但是多窗口存在或者是频繁的来看还是不能使用这个,还有windos这些js全局变量就不用再提了,原因和vuex一样,那么针对electron应该使用什么,跨周期的,cokkie和localstorage是可选的,但是明显分析下,某些情景下并不适合electron(非同源),忘记已久的node正式登场,以后台的全局变量作为依据是可行的,但是双工式的读取修改api用起来明显不够双向绑定来得便捷,但是此系列仅仅为抛砖引玉,也将会放弃vuex,或者利用它的机制进行辅助共存,但是很明显那样做法累赘耦合高,详细做法见整合demo中的全局变量
网友评论