创建带有公共头部的Electron窗口

news2024/11/15 2:19:58

创建带有公共头部的Electron窗口

创建一个公共头部的html文件

1.我们在项目根目录创建一个名为app-header的文件夹

2.在app-header创建一个文件名为header.html的文件

结构如下:

在这里插入图片描述

基本结构和脚本如下


<body>
<div class="header">
    <div class="left">
        <div class="back disabled" onclick="onBack()" id="backButton">
            <div class="backImg" id="backImgButton">
            </div>
        </div>
        <div class="forward disabled" onclick="onForward()" id="forwardButton">
            <div class="forwardImg" id="forwardImgButton">
            </div>
        </div>
        <div class="refresh" onclick="onRefresh()">
            <div class="refreshImg">
                <svg>...</svg>
            </div>
        </div>
    </div>
    <div class="center" id="centerName"></div>
    <div class="right">
        <div class="close" onclick="onCloseWindow()">
            <svg>...<svg>
        </div>
    </div>
</div>
<div class="lodings" id="lodings">
    <svg width="50%" height="50%" viewBox="0 0 50 50">
       ...
    </svg>
</div>
</body>

</html>
<script>

    function onBack() {
        window.electron.app.switchWindow(1);
    }

    function onForward() {
        window.electron.app.switchWindow(2);
    }

    function onRefresh() {
        window.electron.app.switchWindow(3);
    }
    //监听是否路由被改变 修改图标和点击状态
    window.electron.app.OnUpdateNavigationButtons((_event, args) => {
        if (args.canGoBack) {
            document.getElementById('backButton').classList.remove('disabled');
            document.getElementById('backImgButton').style.backgroundImage = 'url("./img/left_arrow.png")';
        } else {
            document.getElementById('backButton').classList.add('disabled');
            document.getElementById('backImgButton').style.backgroundImage = 'url("./img/left_arrow_tint.png")';
        }
        if (args.canGoForward) {
            document.getElementById('forwardButton').classList.remove('disabled');
            document.getElementById('forwardImgButton').style.backgroundImage = 'url("./img/right_arrow.png")';
        } else {
            document.getElementById('forwardButton').classList.add('disabled');
            document.getElementById('forwardImgButton').style.backgroundImage = 'url("./img/right_arrow_tint.png")';
        }

    })


    function onCloseWindow(){
        window.close()
    }
</script>
<style>
  /*
	省略
*/
</style>

结果运行如下:

在这里插入图片描述

创建broseWindow并嵌入broseView

根据应用传入的窗口大小,创建对应的broseWindow,并且引入公共头部文件

    let options = JSON.parse(JSON.stringify(args.options))
    // 窗口最小宽高
    if (!options.minWidth) {
      options.minWidth = options.width
    }
    if (!options.minHeight) {
      options.minHeight = options.height
    }
    options.show = false
    //隐藏工具栏
    options.autoHideMenuBar = true
    options.frame = false
    if (!options.webPreferences) {
      options.webPreferences = {}
    }

    options.webPreferences = Object.assign(options.webPreferences, {
      preload: path.join(app.getAppPath(), 'preload.js'),
      // preload: '../screenShotApp/app-header/header.html',
      webSecurity: false,
    })

    const win = new BrowserWindow(options)
    win.loadFile('../screenShotApp/app-header/header.html')

然后把要打开的页面放进broseView中


    //应用本体
    const view: View = new BrowserView({
      webPreferences: {
        preload: path.join(app.getAppPath(), 'preload.js'),
        webSecurity: false,
      },
    })
    
    // 禁止使用 ctrl+r、  F5 等刷新
    win.webContents.on('before-input-event', (event, input) => {
      if ((input.control || input.meta) && input.key === 'r') {
        event.preventDefault();
      }
      if (input.key === 'f5') {
        event.preventDefault();
      }
    })


    view.webContents.loadURL('打开的页面地址')

将创建好的broseView添加到公共的broseWindows中,创建后的broseView 需要header头下偏移,不然会覆盖掉头部样式

 // view.setBounds({ x: 0, y: 45, width: options.width, height: options.height })
    win.on('ready-to-show', () => {
      win.show()
      win.addBrowserView(view);

      const bounds = win.getBounds()
      view.setBounds({ x: 0, y: 40, width: bounds.width, height: bounds.height - 35 })
    })

    win?.on('resize', () => {
      const bounds = win.getBounds()
      view.setBounds({ x: 0, y: 40, width: bounds.width, height: bounds.height - 35 })
    })
    win?.on('close', () => {
      view.webContents.close();
      win?.close();
    })

监听路由是否发生变化 改变左上角图标的状态

    // 监听子窗口路由变化
    view.webContents.on('did-navigate-in-page', (event, url) => {
      const canGoForward = view.webContents.canGoForward();
      const canGoBack = view.webContents.canGoBack();
      win.webContents?.send(channel.appUpdateNavigationButtons, { canGoForward, canGoBack, args });
    });

    BrowserWindow.getAllWindows()
    BrowserWindow.getFocusedWindow()

结果如下:

在这里插入图片描述

总结

本文通过将公共头部的HTML代码分离到一个独立的文件中,可以方便地在多个窗口之间共享和重用头部代码。这样的结构有助于保持代码的整洁和可维护性,同时使得界面设计更加一致。

– 欢迎点赞、关注、转发、收藏【我码玄黄】,gonghao同名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1696606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Node Video Pro v6.40.0,媲美电脑的专业手机剪辑APP

软件介绍 Node Video Pro&#xff0c;作为一款高端的视频编辑与共享平台&#xff0c;为用户提供了一套完备的视频制作工具集。该应用集成了视频剪辑、视觉特效增强、以及音乐背景选择等功能&#xff0c;允许用户在移动设备上实施专业级别的视频处理。它所具备的高级功能配合其…

Go使用结构体实现类(面向对象)

前置 package main ​ import ("fmt" ) ​ // 矩形结构体 type Rectangle struct {Length intWidth int } ​ // 计算矩形面积 func (r *Rectangle) Area() int {return r.Length * r.Width } ​ func main() {r : Rectangle{4, 2}// 调用 Area() 方法&#xff0c;计…

SpringBoot运维篇(打包,多环境,日志)

文章目录 一、SpringBoot程序的打包与运行二、配置高级三、多环境开发四、日志 一、SpringBoot程序的打包与运行 刚开始做开发学习的小伙伴可能在有一个知识上面有错误的认知&#xff0c;我们天天写程序是在Idea下写的&#xff0c;运行也是在Idea下运行的。 ​但是实际开发完成…

springboot vue 开源 会员收银系统 (4) 门店模块开发

前言 完整版演示 前面我们对会员系统 springboot vue 开源 会员收银系统 (3) 会员管理的开发 实现了简单的会员添加 下面我们将从会员模块进行延伸 门店模块的开发 首先我们先分析一下常见门店的管理模式 常见的管理形式为总公司 - 区域管理&#xff08;若干个门店&#xff…

打造有情感的AI智能体-情感问答

目录 文心智能体平台简介 情感问答智能体介绍 优势1主动提问深入分析你的困扰&#xff0c;合理建议 优势2多次主动提问&#xff0c;引导用户补全信息。 优势3整合多种强大工具 最近发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c…

勒索软件分析_Conti

0. Conti介绍 勒索软件即服务&#xff08;Ransomware as a Service&#xff0c;RaaS&#xff09;变体 Conti 推出还不到两年&#xff0c;已经进行了第七次迭代。Conti被证明是一种敏捷而熟练的恶意软件威胁&#xff0c;能够自主和引导操作&#xff0c;并具有无与伦比的加密速度…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月26日,星期日

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年5月26日 星期日 农历四月十九 1、 医保局&#xff1a;支持将符合条件的村卫生室纳入医保定点&#xff0c;方便农村居民就医。 2、 网传养老金储备严重不足&#xff1f;央视辟谣&#xff1a;这笔钱二十多年来从未动用过&a…

SAP HCM WPBP的几个变量含义

WPBP起源 WPBP是SAP HCM的主数据的集合内表,集合、内表这两个名词如何理解,集合就是多个主数据的汇总,内表是ABAP的几个数据结构,就和我们EXCEL的多行一行。 wpbp数据来源 WPBP的主数据来源于SAP HCM 0000、0001、0007、0027、0008信息类型的汇总,SAP HCM是以时间轴为核心…

Linux/Ubuntu 中安装 ZeroTier,实现内网穿透,2分钟搞定

相信很多人都有远程连接家中设备的需求&#xff0c;如远程连接家中的NAS、Windows等服务&#xff0c;所以会涉及到一个内网穿透工具的使用&#xff0c;如果没有公网IP的情况下&#xff0c;推荐大家使用ZeroTier&#xff0c;这是一款强大的内网穿透工具。 mac和windows版的操作…

Python实现SMA黏菌优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 黏菌优化算法&#xff08;Slime mould algorithm&#xff0c;SMA&#xff09;由Li等于2020年提出&…

LeetCode刷题之HOT100之二叉树的直径

2024/5/25 阴天。这几天睡眠质量都非常好&#xff0c;一切似乎都在慢慢上升。先把题做了 1、题目描述 2、逻辑分析 题目要求就是给一个二叉树&#xff0c;求出两个节点之间的最大长度即为二叉树的直径。怎么做呢&#xff1f;我想不出来。看一下题解吧。题解给出的解法是深度优…

Elasticsearch集群许可证过期问题解决方法汇总

最近在使用elasticsearch的过程中,使用elastic-head进行可视化展示集群的状态和信息,从2024年5月18日突然elastic-head无法现在集群的状态界面啦,elasticsearch集群状态是正常,命令如下: curl -X GET "localhost:9200/_cluster/health?pretty" 在google页面上通过…

小程序的这些知识你知道吗?

一:导航传参 无论是编程式还是声明式导肮传参都是在url?keyvalue&key1value1,无论是否是tabbar页面. 对于回退页面,没办法传参. 这个参数是,跳转到页面的时候,跳转到另一个页面,这个页面就是刚开始执行,等数据执行之后,触发onload,传递的参数放在内存中,跳转是内部底层触…

SpringBoot学习小结之RocketMQ

文章目录 前言一、架构设计1.1 架构图1.2 消息1.3 工作流程 二、部署2.1 单机2.2 集群 三、Springboot Producter3.1 准备3.2 pom依赖、yml 配置3.3 普通消息3.4 顺序、批量、延迟消息3.5 事务消息 四、Springboot Consumer4.1 配置4.2 普通Push消费4.3 回复4.4 集群和广播4.5 …

华为造车布局全曝光,对标奔驰、迈巴赫等

文 | Auto芯球 作者 | 雷慢 这一刻&#xff0c;我承认我格局小了&#xff0c; 就在刚刚&#xff0c;余承东曝光了华为智选车的布局计划&#xff0c; 华为问界、智界、享界等&#xff0c;将全面对标奔驰、迈巴赫、劳斯莱斯等车系&#xff0c; 这布局&#xff0c;确实是世界…

Spring MVC+mybatis 项目入门:旅游网(二) dispatcher与controller与Spring MVC

个人博客&#xff1a;Spring MVCmybatis 项目入门:旅游网&#xff08;二&#xff09;dispatcher与controller与Spring MVC | iwtss blog 先看这个&#xff01; 这是18年的文章&#xff0c;回收站里恢复的&#xff0c;现阶段看基本是没有参考意义的&#xff0c;技术老旧脱离时代…

大规模团队的数据库开发,如何用OceanBase工具快速建立企业级账号体系

前言 为了让数据库开发的安全性与可靠性得以充分保障&#xff0c;数据库开发工具的管控能力显得尤为关键。构建一个健全的账号体系&#xff0c;能够协助开发团队实现对数据库开发工具的全方位管控&#xff0c;从而有效防范各类数据安全隐患&#xff0c;确保数据库开发的顺利进…

深度神经网络——什么是混淆矩阵?

概述 混淆矩阵是一种在机器学习和数据科学中广泛使用的分析工具&#xff0c;用于评估分类模型的性能。它通过比较实际类别和模型预测的类别来提供模型性能的详细信息。以下是混淆矩阵的一些关键点&#xff1a; 结构&#xff1a;混淆矩阵是一个表格&#xff0c;通常有两行两列&…

毫米波雷达模块在智能家居安全系统中的关键技术分析

随着智能技术的不断发展&#xff0c;智能家居已经成为了现代生活的一部分。而智能家居安全系统作为智能家居的重要组成部分&#xff0c;其功能不仅仅是对家庭进行监控和报警&#xff0c;更是通过各种感知技术对家庭安全进行全方位的保障。在智能家居安全系统中&#xff0c;毫米…

Go语言的中间件(middleware)是如何实现的?

文章目录 Go语言的中间件&#xff08;Middleware&#xff09;是如何实现的&#xff1f;中间件的工作原理中间件的实现步骤示例代码总结 Go语言的中间件&#xff08;Middleware&#xff09;是如何实现的&#xff1f; 在Go语言中&#xff0c;中间件&#xff08;Middleware&#…