electron踩坑以及与远端页面交互

1、尝试在远端网页直接require('electron')报以下错误

报该错误是因为当前窗口不能访问到node.js环境

Electron的一个主要特性就是能在渲染进程中运行Node.js,html或者vue项目不能直接require('electron')

想要壳与网页分离,并且达成交互,需要双向定义事件,而electron只需在壳中

2、创建浏览器窗口

// main.js

mainWindow = new BrowserWindow({

    width: 360,

    height: 600,

    x: 0,

    y: 0,

    autoHideMenuBar: true,

    // icon:path.join(__dirname, 'favicon.ico'),

    alwaysOnTop: true,

    // closable: false,

    // frame: false,

    webPreferences: {

      nodeIntegration: true,

      webSecurity: false, //禁用同源策略

      plugins: true, //是否支持插件

      nativeWindowOpen: true, //是否使用原生的window.open()

      webviewTag: true, //是否启用 <webview> tag标签

      // preload: path.join(app.getAppPath(), './static/preload.js'),

      sandbox: true,    //沙盒选项,这个很重要

    }

  })


3、预加载文件方式:

这里预加载文件可以通过new BrowserWindow中的preload,也可以

mainWindow.webContents.session.setPreloads([  //这里的 setPreloads接收数组

  path.join(__dirname, 'static/preload-get-display-media-polyfill.js'),

  path.join(__dirname, 'static/preload.js')

])


加载远程URL

const options = { extraHeaders: 'pragma: no-cache\n' }  // options 使加载忽略 http 缓存  

mainWindow.loadURL('https://github.com', options  ) 

3、electron与远端网页交互

// 远端网页中定义如下, fromWebToElectron定义在electron, ifElectronWantClose定义在远端网页

window.fromWebToElectron('这里是我要告诉electron的内容,比如主要传参或主动请求数据', function(a){

      console.log("这里是回调,拿到要请求的数据", a)

    })

    window.ifElectronWantClose= function(){

      console.log("electron壳告诉我要关闭窗口了,在这里执行窗口关闭前是事件")

    }

// electron接收传参或主动talk

// preload.js

const { ipcRenderer} = require('electron')

window. fromWebToElectron = function (a, callback) {

    console.log('electron收到远端的传参', a)

    callback(config)  // 回调给远端的请求数据,如config

    ipcRenderer.send('close','传参')  // 比如收到请求关闭窗口

}

// main.js 监听主进程当前窗口关闭,关闭前

mainWindow.on('close', (e, a) => {

  console.log("窗口马上要关闭了",)

  mainWindow.webContents.send(" ifElectronWantClose")

})

4、sandbox 沙盒选项

Chromium主要的安全特征之一便是所有的blink渲染或者JavaScript代码都在sandbox内运行。 在sandbox模式下,渲染器只能通过IPC委派任务给主进程来对操作系统进行更改 ,但是 sandbox 模式开启,electron不能访问到远端网页中的window属性, 唯一的例外是预加载脚本;

若 sandbox 设为false, 远端网页挂有插件,当网页在壳中运行,插件所有挂载将会失效,即undefined

因此,electron想要与远端页面交互,且挂有插件或有window交互内容, sandbox必须开启,可以将逻辑写在预加载脚本中

5、 sandbox 模式下,文件之间相互调用(如:preload.js中访问config.js对象)不能直接require,调用方式如下:


方式1:

// preload.js

const config = remote.require('./static/config.js')  //这里remote对象还是与main.js一个层级,因此不能直接./config.js

方式2:

// main.js

const config = require('./static/config.js')

global.config = config  //挂在到global

// preload.js

const { remote } = require('electron')

const config = remote.getGlobal("config")

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