electron中處理不同html頁(yè)面中的通信問(wèn)題主要是通過(guò)主進(jìn)程做一個(gè)橋接作用,來(lái)完成通信耻矮。
首先在main.js中引入 ? ? ? ?const ipc = require('electron').ipcMain; ??
其他頁(yè)面中對(duì)應(yīng)的js文件中引入 ? ? ?const ipc = require('electron').ipcRenderer;
(文件不能交換果正,主進(jìn)程與渲染進(jìn)程的差別)
然后可以使用?ipc.on(事件名稱麻顶,響應(yīng)事件function); 來(lái)監(jiān)聽(tīng)事件,
使用ipc.send(事件名稱) 來(lái)發(fā)送事件舱卡。 (注意響應(yīng)事件的注冊(cè)要在發(fā)送事件的前面噢)
比如:
ipc.on("hereyoua",function(event,data){ //如果沒(méi)有數(shù)據(jù)需要傳辅肾,可以不寫參數(shù)
console.log(data);
})
ipc.send("hereyoua",data); ?//后面跟著的data就是自己想傳的數(shù)據(jù),不想傳不寫就可以了
這樣就簡(jiǎn)單完成了事件的響應(yīng)與發(fā)送轮锥。(注意這種只適應(yīng)在同一個(gè)html頁(yè)面中噢)
不同頁(yè)面中的html交互矫钓,需要把數(shù)據(jù)傳到主進(jìn)程中,再由主進(jìn)程傳出來(lái)舍杜,即A頁(yè)面——main.js——B頁(yè)面
A頁(yè)面發(fā)送數(shù)據(jù)新娜,請(qǐng)求刷新B頁(yè)面
ipc.send("refreshB",data);
main.js接收數(shù)據(jù),再發(fā)送數(shù)據(jù)給B頁(yè)面
ipc.on("refreshB",function(event,data){
? ? ?winB.webContents.send('AwantrefreshYou',data); //winB就是B頁(yè)面在main.js中注冊(cè)的窗口名
})
B頁(yè)面接收main.js發(fā)出來(lái)的信息并進(jìn)行相應(yīng)操作
ipc.on('AwantrefreshYou',function(event,data){
//你想要進(jìn)行的操作
})
這樣就完成了兩個(gè)頁(yè)面之間的交互既绩。event.sender.send也是發(fā)送數(shù)據(jù)的概龄,但是監(jiān)聽(tīng)的只有當(dāng)前渲染的頁(yè)面汇四,對(duì)于兩個(gè)不同html頁(yè)面之間的交互是存在問(wèn)題的飞醉。?
窗口名.webContents.send(事件名稱,數(shù)據(jù)); ?這種方式發(fā)送數(shù)據(jù),就是發(fā)送到對(duì)應(yīng)的監(jiān)聽(tīng)窗口