Electron配置以及常见API方法

2020-01-14

前言

近期有一个Electron的相关需求小编在这边系统的学习一下,然后这篇文章就是简单记录一下配置以及一些简单的api方法

安装以及配置

Electron给小编的感觉就是实现桌面化网页的一个工具,通俗粗暴来说,把浏览器内核拿过来渲染页面,引擎拿过来实现js,那么优点很明显他是能跨平台的。

我们通过官网教程下载即可,导入Electron时一定记得用淘宝镜像下载。小编自己被整了一波的。官网地址

进程结合实现

Electron分为渲染进程和主进程,我们反过来看一下Electron的工程目录其实很容易理解这点。

  • 渲染进程

    我们所看到的程序页面就是由Electron的渲染进程实现描绘。包括html、css、以及渲染形式的js

  • 主进程

    package.json中所配置的main所对应文件被称为主进程,创建web页面展示用户界面。

调试

渲染进程调试

启动项目后我们在这里可以调出渲染进程控制台(就是浏览器控制台) 快捷键:alt+command(control)+i

![IMAGE](quiver-image-url/151FD521B96CF70CEEB1E56C4AB3D14B.jpg =239x186)

主进程调试

这边小编用的vscode,首先配置一下debug中的launch.json文件 ![IMAGE](quiver-image-url/D20FD15A02A3C804E75B8F5570C9E4AF.jpg =303x243)

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch Program",
            "cwd": "${workspaceRoot}",
            "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron",
            "windows": {
                "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron.cmd"
            },
            "args": ["."],
            "outputCapture": "std",
        }
    ]
}

配置好后我们就可以直接设置断点然后调试相关文件

常用的api事件

网页化程序我们很容易就想到,常用api当然是程序(app),以及网页(BrowserWindow对象),可以根据我们所拷贝的快速启动程序对照着看一下,每种事件都对应了各自的几种生命周期,

app常用事件

  • ready 当完成初始化时触发

  • window-all-closed 所有窗口关闭

  • before-quit 开始关闭窗口之前触发(点叉叉的时候)

  • will-quit 窗口关闭应用程序将退出时触发(点叉叉之后)

  • quit 程序关闭后

我们看一下Electron实例结合说明一下,我们可以在每一步里面加上console去感受一下声明周期是在哪个节点所实现的拿app的ready事件举例,具体方法实现我们先不管。

const {app, BrowserWindow} = require('electron')
const path = require('path')

let mainWindow

function createWindow () {
    mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            preload: path.join(__dirname, 'preload.js')
        }
    })
    mainWindow.loadFile('index.html')
    mainWindow.on('closed', function () {
            mainWindow = null
    })
}

// app.on('ready', createWindow)
app.on('ready', () => {
    console.log('course is ready')
    creatWindow();
})

app.on('window-all-closed', function () {
    if (process.platform !== 'darwin') app.quit()
})

app.on('activate', function () {
    if (mainWindow === null) createWindow()
})

常见操作对象

File对象

进行文件操作时我们还是可以通过node提供的fs对象进行操作,那么Electron为文件对象提供了一个path属性 我们看一下下面这个例子

这边我们默认页面定义了一个空白区域供我们拖拽文件,文件拖拽进去我们可以实现对文件详细信息的读取

这边实现了对拖拽进来的文件的绝对路径显示以及文件信息的显示

let fs = require('fs')
  document.addEventListener('drop', (e) => {
    // 取消默认事件
    e.preventDefault();
    // 读取拖拽过来的文件(一个或多个)赋到file数组中去
    const file = e.dataTransfer.files;
    if(file.length > 1) {
      alert('一次只能拖拽一个文件')
    }
    else {
      // 获取文件绝对路径,后续就可以通过path去对文件进行操作
      const path = file[0].path;
      console.log('path:',path);
      const content = fs.readFilefs.readFileSync(path);
      console.log(content);
    }
  });
  document.addEventListener('dragover', (e) => {
    // 拖拽开的默认事件同样也要取消一下
    e.preventDefault();
  });

window.open函数

页面跳转函数,跳转到一个新的窗口,我们通过给标签附上相关事件可以实现

// link假设为标签按钮
let subWin;
link.addEventListener('click', () => {
    subWin = window.open('https://www.taobao.com');
})

BrowserWindowProProxy 对象

对于上面的代码跳转的子窗口对象也有相应的事件,我们最开始将定义一个对象将子窗口事件赋值到定义的对象上。

// 关闭窗口的实例属性
subWin.close();

ending...

原文链接:juejin.im

上一篇:一个白学家眼里的 WebAssembly
下一篇:Angular与Vue生命周期
相关教程
关注微信

扫码加入 JavaScript 社区

相关文章

首次访问,需要验证
微信扫码,关注即可
(仅需验证一次)

欢迎加入 JavaScript 社区

号内回复关键字:

回到顶部