第5章:Electron加載與顯示內容(2)

5.4 加載和顯示不同類型的資源

Electron 支持加載和顯示多種類型的資源,包括圖片、視頻和其他靜態文件。

5.4.1 加載圖片的示例代碼

index.html

<!DOCTYPE html>
<html>
<head><title>Load Image</title>
</head>
<body><h1>Load Image Example</h1><img src="path/to/image.jpg" alt="Example Image">
</body>
</html>

5.4.2 加載視頻的示例代碼

index.html

<!DOCTYPE html>
<html>
<head><title>Load Video</title>
</head>
<body><h1>Load Video Example</h1><video width="600" controls><source src="path/to/video.mp4" type="video/mp4">Your browser does not support the video tag.</video>
</body>
</html>

5.5 處理加載錯誤

在加載內容時,可能會遇到各種錯誤,例如網絡問題或文件不存在。我們可以通過監聽 webContents 事件來處理這些錯誤。

5.5.1 處理加載錯誤的示例代碼

主進程代碼

const { app, BrowserWindow } = require('electron');
const path = require('path');let mainWindow;const createMainWindow = () => {mainWindow = new BrowserWindow({width: 800,height: 600,webPreferences: {preload: path.join(__dirname, 'preload.js'),contextIsolation: true,nodeIntegration: false}});// 監聽加載失敗事件mainWindow.webContents.on('did-fail-load', (event, errorCode, errorDescription, validatedURL) => {console.error(`Failed to load ${validatedURL}: ${errorDescription} (${errorCode})`);// 顯示錯誤頁面mainWindow.loadFile('error.html');});// 加載本地的 index.html 文件mainWindow.loadFile('index.html');// 打開開發者工具(僅在開發階段使用)mainWindow.webContents.openDevTools();mainWindow.on('closed', () => {mainWindow = null;});
};app.on('ready', createMainWindow);app.on('window-all-closed', () => {if (process.platform !== 'darwin') {app.quit();}
});app.on('activate', () => {if (mainWindow === null) {createMainWindow();}
});

error.html

<!DOCTYPE html>
<html>
<head><title>Error</title>
</head>
<body><h1>Failed to load content</h1><p>There was an error loading the requested content. Please try again later.</p>
</body>
</html>

5.6 使用 WebView 標簽

WebView 標簽允許在 Electron 應用中嵌入其他 Web 內容,類似于一個嵌入的瀏覽器。它運行在獨立的進程中,并且具有更高的安全性和穩定性。

5.6.1 使用 WebView 標簽的示例代碼

index.html

<!DOCTYPE html>
<html>
<head><title>WebView Example</title>
</head>
<body><h1>WebView Example</h1><webview id="foo" src="https://www.example.com" style="width:800px; height:600px"></webview>
</body>
</html>

主進程代碼

const { app, BrowserWindow } = require('electron');
const path = require('path');let mainWindow;const createMainWindow = () => {mainWindow = new BrowserWindow({width: 800,height: 600,webPreferences: {preload: path.join(__dirname, 'preload.js'),contextIsolation: true,nodeIntegration: false,webviewTag: true // 啟用 WebView 標簽}});mainWindow.loadFile('index.html');mainWindow.on('closed', () => {mainWindow = null;});
};app.on('ready', createMainWindow);app.on('window-all-closed', () => {if (process.platform !== 'darwin') {app.quit();}
});app.on('activate', () => {if (mainWindow === null) {createMainWindow();}
});

通過本章內容,你已經了解了如何在 Electron 應用中加載和顯示各種內容,包括本地 HTML 文件、遠程 URL、動態內容以及各種類型的資源,并處理加載錯誤和使用 WebView 標簽。接下來的章節將繼續深入探討更多高級功能和最佳實踐,幫助你進一步掌握 Electron 開發。

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

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

相關文章

字符串常量池StringTable

String s1 "a"; 從常量池中取符號a->運行時常量池 ->"a"放入字符串常量池 -> 給s1 String s2 "b"; String s3 s1s2; 創建 new StringBuilder().append("a").append("b").toString() String s4 "a"&q…

鴻蒙使用 @Builder擴展出來的布局數據更新沒法更新UI

由于業務的復雜&#xff0c;所以我們把相關UI抽離出來。但是數據變化了&#xff0c;沒法更新UI Builder MyGridLayout() { } 通過日志打印發現數據的確是更新了&#xff0c;但是UI就沒沒辦法&#xff0c;如何解決呢 Entry Component struct Page35 {// State sArray: bool…

【ajax實戰09】內容管理頁面——刪除功能

本文章目標&#xff1a;點擊刪除圖標實現對應數據刪除 實現步驟如下&#xff1a; 一&#xff1a;將服務器端獲取數據中數據id值綁定到刪除圖標&#xff08;重點&#xff09; 即在渲染時&#xff0c;利用自定義屬性&#xff0c;為td設置id值 <td data-id "${ele.id}…

CEPH client.admin key獲取

通過初始化完畢后&#xff0c;admin節點會在/etc/ceph目標下生成對應的配置文件和對應的key文件&#xff0c;通過ceph orch host add 增加的默認是沒有的 如果很不幸admin節點掛了&#xff0c;怎么在其它節點使用ceph -s 命令呢 啟蒙方法(比較實用) key可以通過ceph auth expor…

chunkers/maxent_ne_chunker/english_ace_multiclass.pickle 找不到

首先在這個nltk_data &#xff1a; NLTK Data官方下的數據集&#xff0c;找不到english_ace_multiclass.pic 說明缺少這個文件 : 那么在 nlp/resources/chunkers/maxent_ne_chunker/english_ace_multiclass.pickle at master teropa/nlp (github.com) 下載那兩個文件 : 然…

在Vue3項目中引入Vite進行熱更新

第一步&#xff1a;初始化一個Vue3項目&#xff0c;可以使用Vue CLI 在開始之前&#xff0c;我們需要確保已經安裝了Vue CLI。可以通過以下命令安裝Vue CLI&#xff1a; bash npm install -g vue/cli 接下來&#xff0c;使用Vue CLI初始化一個Vue3項目&#xff1a; bash vue …

基于SpringBoot的CSGO賽事管理系統

您好&#xff01;我是專注于計算機技術研究的碼農小野。如果您對CSGO賽事管理系統感興趣或有相關開發需求&#xff0c;歡迎隨時聯系我。 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;SpringBoot框架&#xff0c;Java技術 工具&#xff1a;Eclipse&a…

邁阿密色主題學科 HTML5靜態導航源碼

源碼介紹 邁阿密色主題學科 HTML5靜態導航源碼&#xff0c;源碼直接上傳可用&#xff0c;有技術的可以拿去寫個后端搜索調用百度接口&#xff0c;也可用于做引導頁下面加你網址添加一個A標簽就行了&#xff0c;很簡單&#xff0c;需要的朋友就拿去吧 界面預覽 源碼下載 邁阿…

安裝Anaconda + tensorflow

安裝Anaconda tensorflow 下載Anaconda&#xff08;64位&#xff09; https://www.anaconda.com/download/ Anaconda3-xxxxxx-Windows-x86_64&#xff08;不要裝最新的版本&#xff0c;確保Python是3.7&#xff09; 各種Anaconda老版本&#xff1a; https://mirrors.tuna.ts…

跳轉的藝術:Batch文件中GOTO命令的深度解析

跳轉的藝術&#xff1a;Batch文件中GOTO命令的深度解析 在批處理文件&#xff08;Batch&#xff09;的編程世界中&#xff0c;GOTO命令是實現流程控制的重要工具之一。它允許程序跳轉到腳本中的特定標簽位置&#xff0c;從而實現循環、條件分支等復雜的邏輯結構。本文將深入探…

EtherCAT主站IGH-- 4 -- IGH之datagram_pair.h/c文件解析

EtherCAT主站IGH-- 4 -- IGH之datagram_pair.h/c文件解析 0 預覽一 該文件功能datagram_pair.c 文件功能函數預覽 二 函數功能介紹datagram_pair.c 中主要函數的作用1. ec_datagram_pair_init2. ec_datagram_pair_clear3. ec_datagram_pair_process 三 h文件翻譯四 c文件翻譯該…

專題五:Spring源碼之初始化容器上下文

上一篇我們通過如下一段基礎代碼作為切入點&#xff0c;最終找到核心的處理是refresh方法&#xff0c;從今天開始正式進入refresh方法的解讀。 public class Main {public static void main(String[] args) {ApplicationContext context new ClassPathXmlApplicationContext(…

鴻蒙本地簽名不匹配問題

連接鴻蒙手機運行項目報如下錯誤 這是由于本地簽名和鴻蒙設備簽名不匹配導致的&#xff0c;需要注釋掉如下代碼&#xff0c;選擇file project 自動簽名 勾選auto選項&#xff0c;會在build-profile.json5中生成一個簽名&#xff0c;然后運行就ok了~

【Lua】腳本入門

文章目錄 總述一、Lua概述二、Lua環境安裝三、Lua基本語法四、Lua的庫和擴展五、Lua的應用場景六、學習資源 語法1. Lua基本語法示例變量和數據類型控制結構函數 2. Lua標準庫示例字符串操作數學函數文件I/O 3. Lua作為腳本擴展示例&#xff08;假設Lua嵌入在某個應用程序中&am…

vscode python格式化

插件 Black Formatter Black 默認會遵循 PEP 8 的規范&#xff0c;可配置的參數很少&#xff0c;用的人很多。 setting.json 配置&#xff0c;更改插件的每行字符數限制 {"[python]": {"editor.defaultFormatter": "ms-python.black-formatter"…

Redis命令大全(基礎版)

一、基礎命令 redis-server --service-start # 開啟服務 redis-server --service-stop # 停止服務redis-cli # 進入redis界面redis界面操作&#xff1a; ping # 檢測狀態&#xff0c;返回pong證明連接正常set key value # 設置 key 字段的值為value&#xff0c;返回o…

創建一個Django用戶認證系統

目錄 1、Django2、Django用戶認證系統User 模型&#xff1a;Authentication 視圖&#xff1a;認證后端 (Authentication Backends)&#xff1a;Form 類&#xff1a;中間件 (Middleware)&#xff1a;權限和組 (Permissions and Groups)&#xff1a; 3、創建一個django用戶認證系…

服務器的分類,主流服務器的應用場景

一、服務器分類 服務器可以按應用層次、體系架構、用途、外形等進行分類。以下是詳細說明&#xff1a; 按應用層次分類 入門級服務器&#xff1a;這些服務器一般用于小型企業或部門的簡單任務&#xff0c;如文件共享和打印服務。工作組級服務器&#xff1a;適用于中小型企業&…

html2canvas相關(生成圖片)

根據 DOM 生成對應的圖片 function export3png(row, type null) { html2canvas( document.querySelector(#bug), //要生成圖片的dom節點 {useCORS: true, }) 圖片跨域 .then((canvas) > { const saveUrl canvas.toDataURL(image/png) Canvas對象生成base64代碼 co…

MNIST手寫字體識別(算法基礎)

快教程 10分鐘入門神經網絡 PyTorch 手寫數字識別 慢教程 【深度學習Pytorch入門】 簡單回歸問題-1 梯度下降算法 梯度下降算法 l o s s x 2 ? s i n ( x ) loss x^2 * sin(x) lossx2?sin(x) 求導得&#xff1a; f ‘ ( x ) 2 x s i n x x 2 c o s x f^(x)2xsinx x^…