electron 中 webview的使用

webview 想必都有所了解,比如:微信小程序嵌套H5

那么我们在electron中怎么使用webview呢?

我们先跟着官方文档展示一下,看是否能有效果;

若要在应用程序中嵌入网页, 请将 webview 标签添加到应用程序的被嵌入页面中 (这是将显示外来内容的应用程序页)。 在最简单的例子中, webview 标签包括网页的 src 和控制 webview 容器外观的 css 样式:

这是官网示列,我只是调整了高宽以及将链接修改为掘金的链接地址

<webview id="foo" src="https://juejin.cn/" style="display:inline-flex; width:750px; height:calc(100vh - 5px)"></webview>

展示效果:

展示效果1.png

既然我们现在能展示了,说明没得问题正常使用的没得问题的,那么我们就需要了解一些我们在工作中可能会遇到的场景

  • 获取webview的dom
  • 监听页面对否显示
  • 禁止打开新窗口
  • 刷新页面
  • 上一页
  • 下一页

获取webview的dom

先创建一个新窗口(模态框);如果不知道怎么创建新窗口的,可以看这篇文章会讲述怎么创建新窗口以及传值等相关问题

electron创建新窗口(模态框)并相互传值,主进程传值给子进程

webview 页面
<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页面的代码

在webview标签中设置:preload=“preloadPath”;然后返回相关dom字符串,并且在addEventListener中去监听参数是否返回;如果返回就可以去截取相关的一些数据;

这儿的时候大家可以灵活运用即可,这儿是依靠原生去获取dom上的值,如果你想要直接获取某个标签的值,你可以直接根据document.getElementById(“标签名”).innerHTML(示列)去获取;方法很多你可以根据自己的需求去做相关的操作即可

    const preloadPath = computed(()=>{
      return path.join(__static, "/preload.js");
    })

    onMounted(() => {
    
        nextTick(()=>{
            // 获取webview的dom 
          data.webview = document.querySelector("#foo");
            // 监听页面是否渲染完成
          data.webview.addEventListener("did-finish-load", (e) => {
            
            data.webview.addEventListener("ipc-message", async (event) => {
              console.log(event); // 获取参数
              if (event.channel == 'foo-html-content') {
                const html = event.args[0]; // 获取的dom
                console.log(html);
              }
              
            })
            // 通知获取webview并返回参数,这个主要是preload.js里面的东西
            data.webview.send("foo");
          })

        })
    })
新建public/preload.js文件

主要是获取页面的一些标签,也可以根据相关类名获取

// public/preload.js

const { ipcRenderer } = require("electron");

ipcRenderer.on('foo',() => {
    const htmlContent = document.querySelector("html").innerHTML;
    ipcRenderer.sendToHost("foo-html-content", htmlContent);
})

这样就可以获取到webview展示内容的dom标签了

监听页面对否显示

以下是addEventListener的一些方法

1.did-start-loading 页面开始加载

2.load-commit 主页面文档加载

3.page-title-updated title

4.dom-ready 主页面 dom 加载完成

5.load-commit frame文档加载

6.did-frame-finish-load frame 加载完成

7.did-frame-finish-load 最后一个是主框架frame 加载完成

8.did-finish-load 页面加载完成

9.page-favicon-updated 网页 icon

10.did-stop-loading 页面停止加载

禁止打开新窗口

我们在使用掘金的过程中,点击文章时他会打开一个新的窗口;
原因是设置的allowpopups属性;但是将allowpopups改为false时,点击文章会没效果;所以需要将allowpopups属性删除,然后根据下面的代码;就会在同窗口下实现跳转效果;

data.webview.addEventListener('new-window',(e)=>{
    const urlClass = new URL(e.url);
    const { protocol } = urlClass;
    if (protocol === "http:" || protocol === "https:") {
      ata.url = e.url;
    }
})

刷新页面

可以刷新当前页面

// 刷新页面
    const refresh = () => {
      data.webview.reload();
    }

上一页

当我们点击了文章以后,想返回上一页的时候可以使用

// 上一页
    const back = () => {
      data.webview.goBack();
    }

下一页

// 下一页
    const forward = () => {
      data.webview.goForward();
    }

以上就是今天的全部内容了;如果后面想到了,或者遇到了什么我在更新;谢谢大家了

往期文章

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值