electron踩坑指南

Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 ChromiumNode.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。

下述electron版本为13.1.4。

一、安装

1、vue add electron-builder

​ 注:

①error:vue不是XXXX命令

先执行下命令vue -V,确认下本地安装的 vue-cli 版本
如果没有装一下脚手架  我这里是@vue/cli 4.5.13  npm install @vue/cli -g
还是报错的话看下环境变量是否出错

②node版本需要14.x起

2、全局安装electron

cnpm install -g electron -d

1、用cnpm防止下载失败

2、先把三个需要的压缩包提前下好放入cache文件夹下,以免网络太慢安装失败~

注:下载版本需与electron版本保持一致

缓存目录如下:

  • macOS ~/Library/Caches/electron-builder
  • linux ~/.cache/electron-builder
  • windows %LOCALAPPDATA%\electron-builder\cache

参见:https://www.cnblogs.com/xueyoucd/p/8006610.html

3、运行

在这里插入图片描述
在这里插入图片描述

运行npm run electron:serve 9ok了

4、打包

二、问题收录

1、关于请求https://变app://

原因:因为electron中设置了win.loadURL访问了本地index.html文件导致

在这里插入图片描述

解决方案:

重新封装一下axios

①在main.js设置全局变量(这样本地调试的时候也可以走proxy代理)

Vue.prototype.$api = process.env.NODE_ENV == 'development' ? "/frame-selfserviceterminalsfront/" : "http://3a7y354507.zicp.vip:43257/frame-selfserviceterminalsfront/"

②更改axios访问地址

this.$axios.post((this.$api + 'selfServiceCloudFafang/insert'),this.searchObj).then

注:网上还有uu说在main上做异步访问,然后用ipc和render层传送的方法,还没试验过。

2、嵌入webview问题

由于第三方网站设置了frame-ancestor ‘self’ 安全策略的问题,不能利用iframe跳转,只能改用webview的方式,但是官方并不建议使用webview标签,so尽量用iframe,webview对于小白来时真的超级坑!!

https://cloud.tencent.com/developer/article/1559358

①关于与webview通信

与小程序webview不同,小程序提供sdk通过postMessage的方式就可以通信,electron官方文档上面也是写着提供ipc的方式进行通信的,试过了网上千百种方法,然鹅all failed~~~

官方文档是这样写的↓

在这里插入图片描述

安装官方提供的方法:

1、需要在webview添加[nodeintegration]属性,让访客页也具有node集成

2、需要在第三方引入electron,但是会报错↓,到现在仍无解

// 此处使用window.require方法
error1:fs.existsSync is not a function
// 加入window.require判断后也是报错~  
error2:window.require is not a function

猜测官方提供的ipc方法,仅提供主进程Main、渲染进程Renderer使用~~so换种思路

给第三方页面传参,利用url传参的方式

第三方给exe传参,利用webview.getTitle()的方式,虽然有点猥琐,但是也能解燃眉之急~(尝试过直接&&webview.executeJavaScript(code[, userGesture])]获取webview中的dom元素,但是webview元素就是一个空白的iframe~)

在这里插入图片描述

注:上述方法并不能同步传参,尝试官网的各种监听事件,发现并无用。

②关于控制webview内嵌页面再跳转新窗口

此处有个新需求,webview内嵌的第三方页面需要以新窗口的方式打开并预览pdf

有两种方式:

  1. 新建exe窗口的方式 shell.openExternal(e.url)

  2. 新建浏览器窗口的方式 webview.src = e.url;

当访客页面尝试打开新的浏览器窗口时触发。

webview.addEventListener('new-window', (e) => {
          const protocol = require('url').parse(e.url).protocol
            if (protocol === 'http:' || protocol === 'https:') {
              shell.openExternal(e.url) // 新建exe窗口的方式
              // webview.src = e.url;
            }
});
③监听webview鼠标移动、键盘事件

没办法捕获webview的鼠标移动事件,尝试过iohook监听系统鼠标移动事件,不知是版本问题or用法问题,没办法正常使用。

3、自定义关闭exe

渲染进程

var ipcRender = require('electron').ipcRenderer
ipcRender.send('handelClose', "执行关闭")

主进程

// win -- BrowserWindow
ipcMain.on('handelClose', function (res) {
  app.quit()
})

erer
ipcRender.send(‘handelClose’, “执行关闭”)


**主进程**

```js
// win -- BrowserWindow
ipcMain.on('handelClose', function (res) {
  app.quit()
})

4、exe崩溃处理

  // 处理程序崩溃
  win.webContents.on('crashed', () => {
    app.relaunch();
    app.exit(0);
     return  
})

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当需要更新 Vue-Electron 中的 Electron 版本时,我们需要按照以下步骤进行操作。 首先,我们需要确定 Electron 的新版本。我们可以通过查看 Electron 的官方网站(https://www.electronjs.org/)或 GitHub 仓库来获取最新的版本号。 一旦确定了新版本号,我们需要在项目的 package.json 文件中更新 `electron` 的依赖项。找到 `dependencies` 或者 `devDependencies` 部分,并将其对应的依赖项从旧版本更新到新版本。例如,将 `"electron": "^7.0.0"` 更新为 `"electron": "^8.0.0"`。 接下来,运行 `npm install` 命令来安装最新版本的 Electron。这将会自动下载并安装新版本的 Electron。 完成安装后,我们需要确保 Vue-Electron 的一些关键配置也进行了更新。如果在项目中使用了 Vue 的 webpack 模板生成的默认配置,我们需要修改 `build/webpack.base.conf.js` 文件。找到 `externals` 部分,并将 `'electron'` 的值更新为新版本号。例如:`'electron': '@latest'`。 如果项目中使用了 VueCLI 3.x,我们需要在 vue.config.js 文件中进行类似的操作。找到 `configureWebpack` 选项,并将 `externals` 部分的依赖项更新为新版本。 在确保所有必要的更新已经完成后,我们可以重新构建和运行项目,以确保新版本的 Electron 正常工作。可以使用命令 `npm run build` 重新构建项目,并使用 `npm run electron` 或相应的启动命令来启动 Electron。 通过以上步骤,我们可以成功更新 Vue-Electron 中的 Electron 版本,确保项目正常运行并享受最新的 Electron 特性和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值