electron?中?webview的使用示例解析
正文
webview 想必都有所了解,比如:微信小程序嵌套H5
那么我們?cè)趀lectron中怎么使用webview呢?
我們先跟著官方文檔展示一下,看是否能有效果;
若要在應(yīng)用程序中嵌入網(wǎng)頁(yè), 請(qǐng)將 webview 標(biāo)簽添加到應(yīng)用程序的被嵌入頁(yè)面中 (這是將顯示外來(lái)內(nèi)容的應(yīng)用程序頁(yè))。 在最簡(jiǎn)單的例子中, webview 標(biāo)簽包括網(wǎng)頁(yè)的 src 和控制 webview 容器外觀的 css 樣式:
這是官網(wǎng)示列
<webview id="foo" src="https://www.electronjs.org/zh/docs/latest/api/webview-tag#%E7%A4%BA%E4%BE%8B" style="display:inline-flex; width:750px; height:calc(100vh - 5px)"> </webview>
展示效果:
既然我們現(xiàn)在能展示了,說(shuō)明沒(méi)得問(wèn)題正常使用的沒(méi)得問(wèn)題的,那么我們就需要了解一些我們?cè)诠ぷ髦锌赡軙?huì)遇到的場(chǎng)景
- 獲取webview的dom
- 監(jiān)聽(tīng)頁(yè)面對(duì)否顯示
- 禁止打開(kāi)新窗口
- 刷新頁(yè)面
- 上一頁(yè)
- 下一頁(yè)
獲取webview的dom
先創(chuàng)建一個(gè)窗口,子窗口;可以看這篇文章會(huì)講述怎么創(chuàng)建新窗口
electron創(chuàng)建新窗口(模態(tài)框)并相互傳值,主進(jìn)程傳值給子進(jìn)程
webview 頁(yè)面
<webview id="foo" autosize="on" allowpopups :src="url" :data-home="url" scrollbars="none" partition="modal-webview" :preload="preloadPath" style="display:inline-flex; width:750px; height:calc(100vh - 5px)"> </webview>
webview頁(yè)面的代碼
在webview標(biāo)簽中設(shè)置:preload="preloadPath";然后返回相關(guān)dom字符串,并且在addEventListener中去監(jiān)聽(tīng)參數(shù)是否返回;
這兒的時(shí)候大家可以靈活運(yùn)用,比較是依靠原生去獲取dom上的值,如果你直接獲取某個(gè)標(biāo)簽的值的話,你直接獲取標(biāo)簽的text的值即可;根據(jù)自己的需求去做相關(guān)的操作即可
const preloadPath = computed(()=>{ return path.join(__static, "/preload.js"); }) onMounted(() => { nextTick(()=>{ // 獲取webview的dom data.webview = document.querySelector("#foo"); // 監(jiān)聽(tīng)頁(yè)面是否渲染完成 data.webview.addEventListener("did-finish-load", (e) => { data.webview.addEventListener("ipc-message", async (event) => { console.log(event); // 獲取參數(shù) if (event.channel == 'foo-html-content') { const html = event.args[0]; // 獲取的dom console.log(html); } }) // 通知獲取webview并返回參數(shù),這個(gè)主要是preload.js里面的東西 data.webview.send("foo"); }) }) })
新建public/preload.js文件
主要是獲取頁(yè)面的一些標(biāo)簽,也可以根據(jù)相關(guān)類(lèi)名獲取
// public/preload.js const { ipcRenderer } = require("electron"); ipcRenderer.on('foo',() => { const htmlContent = document.querySelector("html").innerHTML; ipcRenderer.sendToHost("foo-html-content", htmlContent); })
這樣就可以獲取到webview展示內(nèi)容的dom標(biāo)簽了
監(jiān)聽(tīng)頁(yè)面對(duì)否顯示
以下是addEventListener的一些方法:
1.did-start-loading 頁(yè)面開(kāi)始加載
2.load-commit 主頁(yè)面文檔加載
3.page-title-updated title
4.dom-ready 主頁(yè)面 dom 加載完成
5.load-commit frame文檔加載
6.did-frame-finish-load frame 加載完成
7.did-frame-finish-load 最后一個(gè)是主框架frame 加載完成
8.did-finish-load 頁(yè)面加載完成
9.page-favicon-updated 網(wǎng)頁(yè) icon
10.did-stop-loading 頁(yè)面停止加載
禁止打開(kāi)新窗口
我們?cè)谑褂镁蚪鸬倪^(guò)程中,點(diǎn)擊文章時(shí)他會(huì)打開(kāi)一個(gè)新的窗口; 原因是設(shè)置的allowpopups屬性;但是將allowpopups改為false時(shí),點(diǎn)擊文章會(huì)沒(méi)效果;所以需要將allowpopups屬性刪除,然后根據(jù)下面的代碼;就會(huì)在同窗口下實(shí)現(xiàn)跳轉(zhuǎn)效果;
data.webview.addEventListener('new-window',(e)=>{ const urlClass = new URL(e.url); const { protocol } = urlClass; if (protocol === "http:" || protocol === "https:") { ata.url = e.url; } })
刷新頁(yè)面
可以刷新當(dāng)前頁(yè)面
// 刷新頁(yè)面 const refresh = () => { data.webview.reload(); }
上一頁(yè)
當(dāng)我們點(diǎn)擊了文章以后,想返回上一頁(yè)的時(shí)候可以使用
// 上一頁(yè) const back = () => { data.webview.goBack(); }
下一頁(yè)
// 下一頁(yè) const forward = () => { data.webview.goForward(); }
以上就是今天的全部?jī)?nèi)容了;
以上就是electron 中 webview的使用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于electron webview使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
前端項(xiàng)目中監(jiān)聽(tīng)localStorage的變化
這篇文章主要為大家介紹了前端項(xiàng)目中監(jiān)聽(tīng)localStorage的變化的解決思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06JS前端宏任務(wù)微任務(wù)及Event Loop使用詳解
這篇文章主要為大家介紹了JS前端宏任務(wù)微任務(wù)及Event Loop使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07JavaScript 實(shí)現(xiàn)點(diǎn)擊關(guān)閉全屏示例詳解
這篇文章主要為大家介紹了JavaScript 實(shí)現(xiàn)點(diǎn)擊關(guān)閉全屏示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08JavaScript中塊級(jí)作用域與函數(shù)作用域深入剖析
這篇文章主要為大家介紹了JavaScript中塊級(jí)作用域與函數(shù)作用域的實(shí)現(xiàn)原理深入剖析,2023-05-05微信小程序request出現(xiàn)400的問(wèn)題解決辦法
這篇文章主要介紹了微信小程序request出現(xiàn)400的問(wèn)題解決辦法的相關(guān)資料,需要的朋友可以參考下2017-05-05前端對(duì)接WebSocket與心跳重連實(shí)現(xiàn)
這篇文章主要為大家介紹了前端對(duì)接WebSocket與心跳重連實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07