Electron 用前端技术开发桌面应用

 一、electron简介

1、electron是由 Github开发的开源框架。

2、它允许开发者使用Web技术构建跨平台的桌面应用。

3、Electron = Chromium + Node.js + Native API。

二、运行流程


1、读取package.json中的入口文件。main.js

2、main.js主进程中创建渲染进程。

3、读取应用页面的布局和样式。

4、使用IPC在主进程执行任务并获取信息。

5、一个主进程可以控制多个渲染进程。


三、常用API

1、Node的 url.format()

url.format({

  protocol: 'https',

  hostname: 'example.com',

  pathname: '/some/path',

  query: {

    page: 1,

    format: 'json'

  }

});

// => 'https://example.com/some/path?page=1&format=json'

2、主进程窗口加载网页内容

win = new BrowserWindow({

        width: 800,

        height: 600,

        webPreferences: {

            nodeIntegration: true, // 支持node.js在html中使用

        }

    });

win.loadURL(url.format({

    protocol: 'file',

  pathname:require('path').resolve(__dirname, './html/main.html')

slashes: true,  }));

})

3、定义菜单

//菜单模板

    const menuTemplate = [ {label: '文件'}]

    const mainMenu = Menu.buildFromTemplate(menuTemplate);

    Menu.setApplicationMenu(mainMenu);

4、子窗口向父窗口发送传递信息

add.html

<script>

        const electron = require('electron');

        const { ipcRenderer } = electron;

        const form = document.querySelector('form')

        // submit 事件

        form.addEventListener('submit', (e) => {

            e.preventDefault();

            const name = document.querySelector('#name').value;

            const ip = document.querySelector('#ip').value;

            // 发送传递信息

            ipcRenderer.send('info:add', { name, ip })

        })

    </script>

5、主进程中添加事件监听

main.js

    const { app, BrowserWindow, Menu, ipcMain } = electron;

    // 事件监听:监听事件信息的传递

    const eventListener = () => {

        // 主进程 监听新增窗口传递过来的信息项

        ipcMain.on('info:add', (e, val) => {

            win.webContents.send('info:add', val);

            addWin.close();

        })

    }

eventListener();

6、主窗口添加接收 子窗口传递过来的信息

main.html

<script>

        const electron = require('electron');

        const { ipcRenderer } = electron;

        // 主窗口接收 新增信息窗口传递过来的数据

        ipcRenderer.on('info:add', (e, value) => {console.log(value);});

    </script>

四、打包命令

"build-win": "electron-packager . info-list-app --out=dist --overwrite --platform=win32 --arch=x64 --prune=true --icon=icon/win/icon.ico",

    "build-linux": "electron-packager . info-list-app --out=dist --overwrite --platform=linux --arch=x64 --prune=true --icon=icon/linux/icon.png",

    "build-mac": "electron-packager . info-list-app --out=dist --overwrite --platform=darwin --arch=x64 --prune=true --icon=icon/mac/icon.icns"

打包工具:electron-packager; 当前打包环境:当前文目录.;打包名称:info-list-app;输出目录:dist;覆盖:overwrite;平台:win32;当前客户端位数:x64;精简打包:true;应用程序的图标:icon/win/icon.ico

五、案例:读取静态文件并在窗口中展示

1、创建txt文件并写入内容。

2、创建main.js文件,编写主进程中代码

var electron = require('electron') //引入electron模块

var app = electron.app  // 创建electron引用

var globalShortCut = electron.globalShortcut

var BrowserWindow = electron.BrowserWindow;  //创建窗口引用

var mainWindow = null;  //声明要打开的主窗口

app.on('ready', () => {

    mainWindow = new BrowserWindow({

        width: 500,

        height: 500,

//  nodeIntegration: true 允许使用node.js

webPreferences: { nodeIntegration: true, enableRemoteModule: true, },

    })

    mainWindow.webContents.openDevTools()

    globalShortCut.register('ctrl+e', () => {

        mainWindow.loadURL('https://jspang.com');

    })

    let isRegister = globalShortCut.isRegistered('ctrl+e') ? 'success' : 'fail';

    console.log(isRegister);

    require('./main/menu.js');

    mainWindow.loadFile('demo7.html')  //加载页面

    // 类似于ifrme内嵌页面

    /* 

      var BrowserView = electron.BrowserView;

        var view = new BrowserView()

        mainWindow.setBrowserView(view);

        view.setBounds({ x: 0, y: 120, width: 1200, height: 680 })

        view.webContents.loadURL('https://jspang.com')

        */

    //监听关闭事件,把主窗口设置为null

    mainWindow.on('closed', () => {

        mainWindow = null

    })

})

app.on('will-quit', function () {

    // 在将要推出应用之前,注销全局快捷键

    globalShortCut.unregister('ctrl+e');

    globalShortCut.unregisterAll();

})

3、创建index.html文件

主要代码

<body>

    <Button id="btn">加载文本</Button><br />

    <div id="mydiv"></div>

    <script src='renderer/index.js'></script>

</body>

renderer.js代码

var fs = require('fs')

window.onload = function () {

    var btn = this.document.querySelector('#btn')

    var mydiv = this.document.querySelector('#mydiv')

    btn.onclick = function () {

        fs.readFile('xiaojiejie.txt', (err, data) => {

            mydiv.innerHTML = data;

        });

    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容