我正在使用电子,并且在用户点击按钮时尝试打开文件浏览器。从渲染过程中,我试图像这样包含elctron.dialog包。
const dialog = require( 'electron' ).dialog;
console.log( dialog );
但是,控制台日志的结果是undefined
我绝对相信我处于渲染过程中,所以我不确定为什么这不起作用。文档表明这是正确的做事方式,但似乎无法正常工作。
这是我的package.json
文件
{
"name": "my-app",
"version": "0.1.0",
"main": "./main.js",
"scripts": {
"start": "electron ."
},
"dependencies": {
"electron": "^0.4.1"
}
}
这是我的main.js
文件
'use strict';
var app = require( 'app' );
var BrowserWindow = require( 'browser-window' );
var ipc = require( 'ipc' );
var mainWindow = null;
app.on(
'ready', function () {
mainWindow = new BrowserWindow(
{
frame : true,
height: 700,
width : 500
}
);
mainWindow.loadUrl( 'file://' + __dirname + '/app/index.html' );
mainWindow.openDevTools();
mainWindow.on(
'closed', function () {
mainWindow = null;
}
);
}
);
ipc.on(
'close-main-window', function () {
app.quit();
}
);
这是渲染的流程文件
// Add your index.js code in this file
var ipc = require( 'ipc' );
const dialog = require( 'electron' ).dialog;
console.log( dialog );
这是控制台
这是不正确的?
答案 0 :(得分:25)
在渲染器过程中,您必须使用远程模块。
const dialog = require('electron').remote.dialog
答案 1 :(得分:3)
最新版本的电子已经改变了需要模块的方式。这些模块封装在电子名称空间内。
// for getting the electrons modules here the new method now i'm using 1.7.12 Electron version (i don't know what that will be in the future)
// you require electron first! it's a name space (module)
var electron = require("electron");
var remote = electron.remote; // you get all the subModuls directly as property (cool incapsulation)
//remote = require("remote") ===> will not work!!!!
// for dialog it's the same !! but we now use remote as modul
var dialog = remote.dialog;
此外,您可以使用此语法,以较少的写入方式导入多个模块,并将它们全部收集在一起:
var {remote, ipcRenderer, someOtherModulFromElectron} = electron;
例如在main.js(主进程)中我们可以编写这样的调用:
const electron = require('electron')
const {app, BrowserWindow, Menu} = electron;
取代:
const electron = require('electron')
// Module to control application life.
const app = electron.app
// Module to create native browser window.
const BrowserWindow = electron.BrowserWindow
//modul for bar menu
const Menu = electron.Menu
答案 2 :(得分:2)
经过几个小时的调查someone else向我指出,这样做的“新”方式(4/15/16)如下。
var remote = require('remote');
var dialog = remote.require('dialog');
dialog.showOpenDialog({
properties: [ 'openFile' ] }, function ( filename ) {
console.log( filename.toString() );
}
);
您必须要求remote
然后从远程需要对话框。您似乎不再需要electron
答案 3 :(得分:1)
此代码适用于html文件的脚本:
const remote = require('electron').remote
const dialog = remote.dialog;
dialog.showErrorBox('Error title', 'error')
答案 4 :(得分:0)
您可以使用以下语法直接从电子中抓取它:
const electron = require('electron')
const {dialog} = electron;
然后您可以调用所需的对话框方法,如下所示:
dialog.showOpenDialog({ properties: ['openFile'] }, (filename) => {
console.log(filename.toString());
});
答案 5 :(得分:0)
对我来说,这是因为我在package.json中使用的是node index.js
而不是npm start
:
"scripts": {
"start": "electron index.js"
},