欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

electron?中?webview的使用示例解析

 更新時(shí)間:2023年02月17日 10:24:49   作者:霧戀  
這篇文章主要為大家介紹了electron?中?webview的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

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 = () =&gt; {
      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)文章

最新評(píng)論