electron 中 webview的使用示例解析

目录
  • 正文
  • 获取webview的dom
    • webview 页面
    • webview页面的代码
    • 新建public/preload.js文件
  • 监听页面对否显示
    • 禁止打开新窗口
    • 刷新页面
    • 上一页
    • 下一页

正文

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

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

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

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

这是官网示列

<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>

展示效果:

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

  • 获取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上的值,如果你直接获取某个标签的值的话,你直接获取标签的text的值即可;根据自己的需求去做相关的操作即可

    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 = () =&gt; {
      data.webview.goBack();
    }

下一页

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

以上就是今天的全部内容了;

以上就是electron 中 webview的使用示例详解的详细内容,更多关于electron webview使用的资料请关注我们其它相关文章!

(0)

相关推荐

  • electron创建新窗口模态框并实现主进程传值给子进程

    目录 正文 创建新窗口 主进程 创建一个路由 试试能不能启动 启动新窗口 传值 正文 我们在开发的过程中难免会遇到需要创建一个子窗口(子进程),但是在这个子进程中所有值都是初始化的,而我们肯定是需要一些值才能进行下一步操作,比如:token: 那么我们怎么去传递值呢? 我先给伙伴们说一些,基本原理(下面很多东西会建立在vue的基础上生命周期,如果是其他框架就自行修改就行),然后再给大家根据代码一步一步操作. 首先我们是需要创建一个子进程(或者叫新窗口,模态框都可以) 发送一个命令到主进程去创建一

  • Electron架构深入探究

    目录 Electron是什么 Electron架构 小结 Electron是什么 引用来自官网的解释: Electron 是一个使用 JavaScript. HTML 和 CSS 构建桌面应用程序的框架.通过将 Chromium 和 Node.js 嵌入到它的二进制文件中,Electron 允许你维护一个 JavaScript 代码库,并创建可以在 Windows. macOS 和 Linux 上运行的跨平台应用程序ーー不需要本地开发经验. 如果我们追溯历史,可以发现Electron的前身是At

  • electron 中 webview的使用示例解析

    目录 正文 获取webview的dom webview 页面 webview页面的代码 新建public/preload.js文件 监听页面对否显示 禁止打开新窗口 刷新页面 上一页 下一页 正文 webview 想必都有所了解,比如:微信小程序嵌套H5 那么我们在electron中怎么使用webview呢? 我们先跟着官方文档展示一下,看是否能有效果: 若要在应用程序中嵌入网页, 请将 webview 标签添加到应用程序的被嵌入页面中 (这是将显示外来内容的应用程序页). 在最简单的例子中,

  • Oracle PL/SQL中异常高级特性示例解析

    PL/SQL(Procedural Language/SQL,过程语言/SQL)是结合了Oracel过程语言和结构化查询语言(SQL)的一种扩展语言. 优点: (1)PL/SQL具有编程语言的特点,它能把一组SQL语句放到一个模块中,使其更具模块化种序的特点. (2)PL/SQL可以采用过程性语言控制程序的结构. (3)PL/SQL有自动处理的异常处理机制. (4)PL/SQL程序块具有更好的可移植性,可移植到另一个Oracle数据库中. (5)PL/SQL程序减少了网络的交互,有助于提高程序性

  • Java 在PDF中添加骑缝章示例解析

    骑缝章是用于往来业务合同,以确保合同真实.有效的印章加盖方法,是一种防范风险的重要方式.在Java程序中,可以通过使用工具来辅助加盖这种骑缝章. 工具:Free Spire.PDF for Java (免费版) 工具获取及jar文件导入: 方式1:通过官网下载jar包,并解压,手动导入lib文件夹下的Spire.Pdf.jar文件. 方式2:通过创建Maven程序,在pom.xml中配置maven仓库路径并指定Free Spire.PDF for Java 的依赖,配置完成后,在IDEA中,点击

  • c++中ref的作用示例解析

    目录 正文 示例1: 输出: 输出: 总结 正文 C++11 中引入 std::ref 用于取某个变量的引用,这个引入是为了解决一些传参问题. 我们知道 C++ 中本来就有引用的存在,为何 C++11 中还要引入一个 std::ref 了?主要是考虑函数式编程(如 std::bind)在使用时,是对参数直接拷贝,而不是引用.下面通过例子说明 示例1: #include <functional> #include <iostream> void f(int& n1, int&

  • electron中使用bootstrap的示例代码

    安装 安装bootstrap命令如下: npm install bootstrap --save 安装后可能报告如下错误: npm WARN bootstrap@4.1.3 requires a peer of popper.js@^1.14.3 but none is installed. You must install peer dependencies yourself. 需要自行安装popper,命令如下: npm install popper.js@^1.14.3 --save 页面

  • electron渲染进程主进程相互传值示例解析

    目录 在electron中分为渲染进程和主进程 浏览器传值给主进程 浏览器环境 主进程 主进程传值给渲染进程 主进程 渲染进程 注意 在electron中分为渲染进程和主进程 渲染进程就是浏览器环境,主进程就是node环境 既然他们是不同的环境,那么为我们怎么让他们相互关联起来呢?或者说怎么传递值? 毕竟在开发中可能会遇到我想要的值只能在node环境中才能获取,然后node中可能也会需要浏览器环境的值:这个时候就需要两个环境联通起来相互传值 浏览器传值给主进程 浏览器环境 引入: import

  • android中webview定位问题示例详解

    前言 现在很多App里都内置了Web网页(Hyprid App),比如说很多电商平台,淘宝.京东.聚划算等等 京东首页 那么这种该如何实现呢?其实这是Android里一个叫WebView的组件实现的. 最近在做安卓的网页开发.有一个页面需要用到定位,但是一直定位获取失败.很难过.网上教程也很多,但是无一例外全部失败.最后老夫花了3天时间,呕心沥血,终于研制出了解决方案. 三步走战略: 一.获取权限 android 6.0 以后,需要动态的获取位置或者存储权限,按照各自的爱好放置位置.我是应用开启

  • java eclipse 中文件的上传和下载示例解析

    文件的上传与下载(一) 在实现文件上传和下载之前我们需要做一些准备工作,在Apache官网去下载文件上传下载的两个组件,下载链接这里给出:common-fileupload组件下载:http://commons.apache.org/proper/commons-fileupload/ common-io组件下载:http://commons.apache.org/proper/commons-io/根据自己需求下载对应版本 一.创建工程 将所需要的两个开发包导入到工程项目中如图: 二.代码编写

  • PHP中->和=>的含义及使用示例解析

    在学习PHP中,遇到了->和=>这两个符号. 刚遇到这两个符号的时候不知道它们代表的含义,在经过百度后才发这两个符号的秘密. 下面来看一下在PHP中->的秘密,如下代码. <?php class Car { public $speed = 0; //增加speedUp方法,使speed加10 public function speedUp(){ $this->speed+=10; } } $car = new Car(); $car->speedUp(); echo $

  • Elasticsearch在应用中常见错误示例解析

    目录 一 read_only_allow_delete" : "true" 二 illegal_argument_exception 三 Result window is too large 一 read_only_allow_delete" : "true" 当我们在向某个索引添加一条数据的时候,可能(极少情况)会碰到下面的报错: { "error": { "root_cause": [ { "

随机推荐