electron + vue3 + vite 主進程到渲染進程的單向通信

用示例講解下主進程到渲染進程的單向通信
初始版本項目結構可參考項目:https://github.com/ylpxzx/electron-forge-project/tree/init_project

請添加圖片描述

主進程到渲染進程(單向)

以Electron官方文檔給出的”主進程主動觸發動作,發送內容給渲染進程“為例。
實現整項目示例:https://github.com/ylpxzx/electron-forge-project/tree/main_to_render

mainWindow.webContents.send(消息名, 消息內容)

  • mainWindow是一個 BrowserWindow 實例,表示應用程序的主窗口
  • webContents是 mainWindow 的一個屬性,允許你訪問和控制窗口中的網頁內容
  • send 方法用于從主進程向渲染進程發送異步消息

通信邏輯

  • src/main.js
    通過點擊菜單欄的按鈕,模擬主進程向渲染進程發送消息
    請添加圖片描述具體來說,這段代碼的作用是:從主進程向渲染進程發送一個名為 ‘update-counter’ 的消息。該消息攜帶一個參數值 1。在渲染進程中,你可以通過監聽 ‘update-counter’ 事件來接收這個消息并進行相應的處理

    完整代碼如下:

    import { app, BrowserWindow, Menu } from 'electron';
    import path from 'node:path';
    import started from 'electron-squirrel-startup';// Avoid Warning:Electron Security Warning (Insecure Content-Security-Policy) This renderer process has either no Content Security
    process.env["ELECTRON_DISABLE_SECURITY_WARNINGS"] = "true";if (started) {app.quit();
    }const createWindow = () => {const mainWindow = new BrowserWindow({width: 800,height: 600,webPreferences: {preload: path.join(__dirname, 'preload.js'),},});const menu = Menu.buildFromTemplate([{label: 'Menu',submenu: [{click: () => mainWindow.webContents.send('update-counter', 1),label: 'Increment'},{click: () => mainWindow.webContents.send('update-counter', -1),label: 'Decrement'}]}])Menu.setApplicationMenu(menu)if (MAIN_WINDOW_VITE_DEV_SERVER_URL) {mainWindow.loadURL(MAIN_WINDOW_VITE_DEV_SERVER_URL);} else {mainWindow.loadFile(path.join(__dirname, `../renderer/${MAIN_WINDOW_VITE_NAME}/index.html`));}mainWindow.webContents.openDevTools();
    };app.whenReady().then(() => {createWindow();app.on('activate', () => {if (BrowserWindow.getAllWindows().length === 0) {createWindow();}});
    });app.on('window-all-closed', () => {if (process.platform !== 'darwin') {app.quit();}
    });
    

    在這個示例中,當用戶點擊窗口菜單的Increment 時向渲染進程發送1,點擊窗口菜單的Decrement時向渲染進程發送-1

  • src/preload.js

    preload.js 用于上下文隔離;將確保您的 預加載腳本Electron的內部邏輯 運行在所加載的webcontent網頁之外的另一個獨立的上下文環境里。 有助于阻止網站訪問Electron 的內部組件和 預加載腳本可訪問的高等級權限的API。簡而言之就是提供一個入口給渲染進程(前端頁面)使用,避免被攻擊者隨意調用electron內部API。

    該段代碼的作用是向外暴露一個監聽函數onUpdateCounter , 前端頁面調用該方法進行監聽。

    const { contextBridge, ipcRenderer } = require('electron/renderer')contextBridge.exposeInMainWorld('electronAPI', {onUpdateCounter: (callback) => ipcRenderer.on('update-counter', (_event, value) => callback(value)),
    })
    

頁面示例

通信邏輯實現后,接下來就用一個頁面來驗證結果

  • src/vue-project/pages/mainToRenderTo/TwoWay.vue

    <template><div><div>click menu to set counter</div>Current value: <strong id="counter">{{ inputVal }}</strong></div>
    </template><script setup>
    import { ref } from 'vue'
    const inputVal = ref(0)
    electronAPI.onUpdateCounter((value) => {inputVal.value = inputVal.value + value
    })
    </script>
    
  • src/vue-project/router/index.js

    import { createWebHashHistory, createRouter } from 'vue-router'import HomeView from '@/vue-project/pages/home/index.vue'
    import MainToRender from '@/vue-project/pages/mainToRender/index.vue'const routes = [{ path: '/', component: HomeView },// 注冊示例頁面路由{ path: '/mainToRender', component: MainToRender },
    ]
    const router = createRouter({history: createWebHashHistory(),routes,
    })export default router;
    
  • src/vue-project/App.vue

    <template><h1>🖥? Hello World!</h1><p>Welcome to your Electron application.</p><p><strong>Current route path:</strong> {{ $route.fullPath }}</p><nav><div><RouterLink to="/">Go to Home</RouterLink></div><div><RouterLink to="/mainToRender">Main-Process --> Render-Process</RouterLink></div></nav><div style="margin-top: 20px; border: 1px solid grey; padding: 20px; border-radius: 10px;"><router-view></router-view></div>
    </template><script setup>
    </script>
    

項目結構

請添加圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/71845.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/71845.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/71845.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【雜談】-因果性:開啟機器學習新紀元?

文章目錄 因果性&#xff1a;開啟機器學習新紀元&#xff1f;一、機器學習的現狀與局限二、因果性的定義與意義&#xff08;一&#xff09;日常生活中的因果性案例&#xff08;二&#xff09;相關性與因果性的區別 三、現有機器學習模型的困境與因果性的價值&#xff08;一&…

【Python】omegaconf 用法詳解

OmegaConf&#xff1a;從基礎到進階 1. OmegaConf 簡介 OmegaConf 是 hydra 背后的核心配置庫&#xff0c;提供比 argparse 和 json.load 更靈活的配置管理能力。其主要特性包括&#xff1a; 安裝 OmegaConf&#xff1a; pip install omegaconf2. 基本操作 2.1 創建 OmegaC…

如何在 Windows 10 啟用卓越性能模式及不同電源計劃對比

在使用 powercfg -duplicatescheme 命令啟用 “卓越性能模式”&#xff08;即 Ultimate Performance 模式&#xff09;之前&#xff0c;有幾個前提條件需要注意&#xff1a; 前提條件&#xff1a; 系統版本要求&#xff1a;卓越性能模式 僅在 Windows 10 專業版 或更高版本&a…

請談談 HTTP 中的安全策略,如何防范常見的Web攻擊(如XSS、CSRF)?

一、Web安全核心防御機制 &#xff08;一&#xff09;XSS攻擊防御&#xff08;跨站腳本攻擊&#xff09; 1. 原理與分類 ?存儲型XSS&#xff1a;惡意腳本被持久化存儲在服務端&#xff08;如數據庫&#xff09;?反射型XSS&#xff1a;腳本通過URL參數或表單提交觸發執行?…

三、0-1搭建springboot+vue3前后端分離-idea新建springboot項目

一、ideal新建項目1 ideal新建項目2 至此父項目就創建好了&#xff0c;下面創建多模塊&#xff1a; 填好之后點擊create 不刪了&#xff0c;直接改包名&#xff0c;看自己喜歡 修改包名和啟動類名&#xff1a; 打開ServiceApplication啟動類&#xff0c;修改如下&#xff1a; …

從0到1入門RabbitMQ

一、同步調用 優勢&#xff1a;時效性強&#xff0c;等待到結果后才返回 缺點&#xff1a; 拓展性差性能下降級聯失敗問題 二、異步調用 優勢&#xff1a; 耦合度低&#xff0c;拓展性強異步調用&#xff0c;無需等待&#xff0c;性能好故障隔離&#xff0c;下游服務故障不影響…

二維碼識別OCR接口:開啟高效信息提取的新篇章

前言 在數字化時代&#xff0c;二維碼作為一種高效的信息傳遞工具&#xff0c;已經廣泛應用于各個領域。而二維碼識別OCR接口的出現&#xff0c;更是為企業和開發者提供了一種快速、準確地提取信息的解決方案。 技術原理&#xff1a;圖像識別與數據解析的完美結合 二維碼識別…

ThinkPHP框架

在電腦C磁盤中安裝composer 命令 在電腦的D盤中創建cd文件夾 切換磁盤 創建tp框架 創建一個aa的網站&#xff0c;更換路徑到上一步下載的tp框架路徑 在管理中修改路徑 下載壓縮包public和view 將前面代碼中的public和view文件替換 在PHPStom 中打開文件 運行指定路徑 修改demo…

Matlab:矩陣運算篇——矩陣數學運算

目錄 1.矩陣的加法運算 實例——驗證加法法則 實例——矩陣求和 實例——矩陣求差 2.矩陣的乘法運算 1.數乘運算 2.乘運算 3.點乘運算 實例——矩陣乘法運算 3.矩陣的除法運算 1.左除運算 實例——驗證矩陣的除法 2.右除運算 實例——矩陣的除法 ヾ(&#xffe3;…

快速從C過度C++(一):namespace,C++的輸入和輸出,缺省參數,函數重載

&#x1f4dd;前言&#xff1a; 本文章適合有一定C語言編程基礎的讀者瀏覽&#xff0c;主要介紹從C語言到C過度&#xff0c;我們首先要掌握的一些基礎知識&#xff0c;以便于我們快速進入C的學習&#xff0c;為后面的學習打下基礎。 這篇文章的主要內容有&#xff1a; 1&#x…

C語言 進階指針學習筆記

文章目錄 字符指針指針數組數組指針數組名數組傳參 函數指針函數指針數組指向函數指針數組的指針 回調函數Qsort 的使用通過冒泡排序模擬實現 qsort 大部分的內容都寫在代碼注釋中 指針有類型&#xff0c;指針的類型決定了指針的整數的步長&#xff0c;指針解引用操作的時候的權…

李沐《動手學深度學習》——14.9. 用于預訓練BERT的數據集——wiki數據集問題以及存在的其他問題

問題1&#xff1a;出現"file is not a zip file" 原因是鏈接已經失效。 解決方法&#xff1a;打開下面鏈接自行下載&#xff0c;需要魔法。下載完解壓到特定位置。 下載鏈接&#xff1a;項目首頁 - Wikitext-2-v1數據包下載:Wikitext-2-v1 數據包下載本倉庫提供了一…

【芯片驗證】verificationguide上的36道UVM面試題

跟上一篇一樣,verificationguide上的36到UVM面試題,通義回答ds判卷。 1. What is uvm_transaction, uvm_seq_item, uvm_object, uvm_component? uvm_transaction、uvm_seq_item、uvm_object、uvm_component是什么? uvm_transaction是UVM中所有事務的基礎類,用于表示仿真…

Python 動態規劃(DP)套路總結

Python 動態規劃&#xff08;DP&#xff09;套路總結 在解決算法問題時&#xff0c;動態規劃&#xff08;DP&#xff09; 是一種非常常見的優化技巧&#xff0c;它可以通過保存子問題的結果來避免重復計算&#xff0c;從而減少時間復雜度。Python 提供了非常方便的語法特性&am…

ESP32驅動OV3660攝像頭實現yoloV5物體分類(攝像頭支持紅外夜視、邊緣AI計算)

目錄 1、傳感器特性 2、硬件原理圖 3、驅動程序 ESP32-S3 AI智能攝像頭模塊是一款專為智能家居和物聯網應用打造的高性能邊緣AI開發模組。它集成了攝像頭、麥克風、音頻功放、環境光傳感器和夜視補光燈,無需依賴云端即可實現本地化AI推理。 憑借TensorFlow Lite、YOLO和O…

RReadWriteLock讀寫鎖應用場景

背景 操作涉及一批數據&#xff0c;如訂單&#xff0c;可能存在多個場景下操作&#xff0c;先使用讀鎖&#xff0c;從redis緩存中獲取操作中數據 比如 關閉賬單&#xff0c; 發起調賬&#xff0c; 線下結算&#xff0c; 合并支付 先判斷當前操作的數據&#xff0c;是否在…

網絡安全高級軟件編程技術 網絡安全 軟件開發

安全軟件開發入門 軟件安全問題 有趣的《黑客帝國》終極解釋&#xff1a; 《黑客帝國》故事里面的人物關系&#xff0c;就像電腦里面的各種程序的關系一樣&#xff1a; 電腦里面的系統程序&#xff1a;Matrix&#xff1b; 病毒程序&#xff1a;以Neo為首的人類&#xff1b; 防病…

蘋果商店上架流程,app上架發布流程

蘋果商店地址 https://appstoreconnect.apple.com/login 其他地址:開發 - Apple Developer 1.更新代碼 將項目的代碼更新到最新,更新成功后右下角會給出提示 2.打開模擬器 鼠標右鍵可以選擇設備(Device) 3.測試運行 如下圖可以看到已經識別到設備了,點擊運行即可,運行到模…

正點原子[第三期]Arm(iMX6U)Linux移植學習筆記-2.1 uboot簡介

前言&#xff1a; 本文是根據嗶哩嗶哩網站上“Arm(iMX6U)Linux系統移植和根文件系統構鍵篇”視頻的學習筆記&#xff0c;在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內容。本文大量引用了正點原子教學視頻和鏈接中的內容。 引用&#xff1a; …