摘要:使用在兩個(gè)進(jìn)程主進(jìn)程和渲染進(jìn)程之間進(jìn)行通訊此系列文章的應(yīng)用示例已發(fā)布于可以或下載后運(yùn)行查看歡迎通過進(jìn)程間通信模塊允許您在主進(jìn)程和渲染進(jìn)程之間發(fā)送和接收同步和異步消息這個(gè)模塊有一個(gè)版本可用于這兩個(gè)進(jìn)程和在瀏覽器中查看和的完整文檔異步消息
使用 Electron 在兩個(gè)進(jìn)程 (主進(jìn)程和渲染進(jìn)程) 之間進(jìn)行通訊
此系列文章的應(yīng)用示例已發(fā)布于 GitHub: electron-api-demos-Zh_CN. 可以 Clone 或下載后運(yùn)行查看. 歡迎 Star .
通過 ipc(進(jìn)程間通信)模塊允許您在主進(jìn)程和渲染進(jìn)程之間發(fā)送和接收同步和異步消息.
這個(gè)模塊有一個(gè)版本可用于這兩個(gè)進(jìn)程: ipcMain 和 ipcRenderer.
在瀏覽器中查看 main process 和 renderer proces 的完整 API 文檔.
異步消息支持: Win, macOS, Linux | 進(jìn)程: Both
使用 ipc 以異步方式在進(jìn)程之間發(fā)送消息是首選方法, 因?yàn)樗鼤?huì)在完成時(shí)返回, 而不會(huì)阻止同一進(jìn)程中的其他操作.
此示例將從此進(jìn)程(渲染器)發(fā)送異步消息 "Ping" 到主進(jìn)程, 然后主進(jìn)程回答 "Pong".
渲染器進(jìn)程
const ipc = require("electron").ipcRenderer const asyncMsgBtn = document.getElementById("async-msg") asyncMsgBtn.addEventListener("click", function () { ipc.send("asynchronous-message", "ping") }) ipc.on("asynchronous-reply", function (event, arg) { const message = `異步消息回復(fù): ${arg}` document.getElementById("async-reply").innerHTML = message })
主進(jìn)程
const ipc = require("electron").ipcMain ipc.on("asynchronous-message", function (event, arg) { event.sender.send("asynchronous-reply", "pong") })同步消息
支持: Win, macOS, Linux | 進(jìn)程: Both
您可以使用 ipc 模塊在進(jìn)程之間發(fā)送同步消息. 但請注意, 此方法的同步特性意味著它在完成任務(wù)時(shí)會(huì)阻止其他操作.
此示例將從此進(jìn)程(渲染器)發(fā)送同步消息 "Ping" 到主進(jìn)程, 然后主進(jìn)程回答 "Pong".
渲染器進(jìn)程
const ipc = require("electron").ipcRenderer const syncMsgBtn = document.getElementById("sync-msg") syncMsgBtn.addEventListener("click", function () { const reply = ipc.sendSync("synchronous-message", "ping") const message = `同步消息回復(fù): ${reply}` document.getElementById("sync-reply").innerHTML = message })
主進(jìn)程
const ipc = require("electron").ipcMain ipc.on("synchronous-message", function (event, arg) { event.returnValue = "pong" })與隱藏窗口通信
支持: Win, macOS, Linux | 進(jìn)程: Both
通常的做法是創(chuàng)建一個(gè)新的不可見瀏覽器窗口(渲染器進(jìn)程), 以便在不影響主應(yīng)用程序窗口中的性能的情況下運(yùn)行任務(wù).
在這個(gè)示例中, 我們使用 remote 模塊從這個(gè)渲染器進(jìn)程創(chuàng)建一個(gè)新的不可見的瀏覽器窗口. 當(dāng)新頁面加載時(shí), 我們用 ipc 發(fā)送一個(gè)消息給正在監(jiān)聽的新窗口.
然后新窗口計(jì)算階乘并發(fā)送要由此接收的結(jié)果到原始窗口并添加到上面的頁面中.
渲染器進(jìn)程
const BrowserWindow = require("electron").remote.BrowserWindow const ipcRenderer = require("electron").ipcRenderer const path = require("path") const invisMsgBtn = document.getElementById("invis-msg") const invisReply = document.getElementById("invis-reply") invisMsgBtn.addEventListener("click", function (clickEvent) { const windowID = BrowserWindow.getFocusedWindow().id const invisPath = "file://" + path.join(__dirname, "../../sections/communication/invisible.html") let win = new BrowserWindow({ width: 400, height: 400, show: false }) win.loadURL(invisPath) win.webContents.on("did-finish-load", function () { const input = 100 win.webContents.send("compute-factorial", input, windowID) }) }) ipcRenderer.on("factorial-computed", function (event, input, output) { const message = `${input} 的階乘是 ${output}` invisReply.textContent = message })
隱藏窗口頁面的HTML
如果這邊文章對您有幫助, 感謝 下方點(diǎn)贊 或 Star GitHub: electron-api-demos-Zh_CN 支持, 謝謝.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/88975.html
摘要:而這里的單元格信息是唯一的,所以直接通過為一個(gè)空對象賦值即可。和相關(guān)的知識(shí)和技巧高亮的列單元格采用展示。在中,被選中的單元格會(huì)高亮相應(yīng)的行和列,以提醒用戶。 showImg(https://segmentfault.com/img/bVGkdk?w=900&h=500); XCEL 是一個(gè) Excel 數(shù)據(jù)清洗工具,其通過可視化的方式讓用戶輕松地對 Excel 數(shù)據(jù)進(jìn)行篩選。 XCEL...
摘要:進(jìn)程主進(jìn)程在里,運(yùn)行里腳本的進(jìn)程被稱為主進(jìn)程。渲染進(jìn)程由于使用來展示頁面,所以的多進(jìn)程結(jié)構(gòu)也被充分利用。當(dāng)一個(gè)實(shí)例被銷毀后,相應(yīng)的渲染進(jìn)程也會(huì)被終止。在,我們提供用于在主進(jìn)程與渲染進(jìn)程之間通訊的模塊。 Github 系列文章地址筆者前兩天心血來潮做了個(gè)MACOS下可以進(jìn)行OCR圖文識(shí)別的小工具,發(fā)現(xiàn)Electron 在1.x之后API發(fā)生了挺大的變化,估計(jì)也是我好久沒碰了,所以打算把這...
摘要:當(dāng)一個(gè)實(shí)例被銷毀后,相應(yīng)的渲染進(jìn)程也會(huì)被終止。之所以命名為,主要是為了與主進(jìn)程這個(gè)概念對應(yīng)。部分在事件觸發(fā)后才能使用。當(dāng)全部窗口關(guān)閉時(shí)退出。主進(jìn)程接收到消息并處理之后,會(huì)返回處理結(jié)果。 簡介 Electron 是一個(gè)可以使用 Web 技術(shù)如 JavaScript、HTML 和 CSS 來創(chuàng)建跨平臺(tái)原生桌面應(yīng)用的框架。借助 Electron,我們可以使用純 JavaScript 來調(diào)用豐...
摘要:在菜單中,我想點(diǎn)擊子菜單打開一個(gè)網(wǎng)站,那么就可以用到方法,則會(huì)在默認(rèn)瀏覽器中打開打包應(yīng)用其實(shí)將程序打包成桌面應(yīng)用才是比較麻煩的事。 前言 Electron 是一個(gè)搭建跨平臺(tái)桌面應(yīng)用的框架,僅僅使用 JavaScript、HTML 以及 CSS,即可快速而容易地搭建一個(gè)原生應(yīng)用。這對于想要涉及其他領(lǐng)域的開發(fā)者來說是一個(gè)非常大的福利。 項(xiàng)目介紹 倉庫地址:lin-xin/calculato...
electron-bridge github鏈接 求star Motivition 如果想一套代碼同時(shí)能跑在web環(huán)境和electron環(huán)境中,就需要在代碼中先判斷環(huán)境,再分別寫對應(yīng)的邏輯。每次寫到electron環(huán)境下的邏輯,又要區(qū)分渲染進(jìn)程和主進(jìn)程,因?yàn)橛行┦轮荒茕秩具M(jìn)程做,有些事只能主進(jìn)程做。所以,我希望能將這些抽象出來,某個(gè)方法,只能在electron環(huán)境下被調(diào)用,并且不需要關(guān)心在什么進(jìn)...
閱讀 3400·2021-10-08 10:15
閱讀 5440·2021-09-23 11:56
閱讀 1467·2019-08-30 15:55
閱讀 445·2019-08-29 16:05
閱讀 2725·2019-08-29 12:34
閱讀 2036·2019-08-29 12:18
閱讀 914·2019-08-26 12:02
閱讀 1650·2019-08-26 12:00