J'utilise electron et j'essaie d'ouvrir un navigateur de fichiers lorsqu'un utilisateur clique sur le bouton. Depuis le processus de rendu, j'essaye d'inclure le paquet elctron.dialog comme ceci.
const dialog = require( 'electron' ).dialog;
console.log( dialog );
Cependant, le résultat du journal de la console est undefined
Je suis absolument sûr que je suis dans le processus de rendu donc je ne suis pas sûr de savoir pourquoi cela ne fonctionne pas. La documentation suggère que c'est la bonne façon de faire les choses mais que cela ne semble pas fonctionner.
Ceci est mon fichier package.json
{
"name": "my-app",
"version": "0.1.0",
"main": "./main.js",
"scripts": {
"start": "electron ."
},
"dependencies": {
"electron": "^0.4.1"
}
}
Ceci est mon fichier 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();
}
);
c'est le fichier de processus rendu
// Add your index.js code in this file
var ipc = require( 'ipc' );
const dialog = require( 'electron' ).dialog;
console.log( dialog );
C'est la console
Est-ce incorrect?
Après quelques heures de réflexion, quelqu'un d'autre m'a fait remarquer que la "nouvelle" méthode (le 15/04/16) de procéder est la suivante.
var remote = require('remote');
var dialog = remote.require('dialog');
dialog.showOpenDialog({
properties: [ 'openFile' ] }, function ( filename ) {
console.log( filename.toString() );
}
);
Vous devez exiger remote
et ensuite à partir de dialoguer avec besoin. Il semble que vous n'avez plus besoin d'exiger electron
Sur le processus de rendu, vous devez utiliser le module Remote.
const dialog = require('electron').remote.dialog
Plus d'informations:
API Electron Dialog
API Electron Remote
Electron dans la version la plus récente a changé la manière d’exiger les modules. Les modules sont encapsulés dans l'espace de noms d'électrons.
// 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;
Vous pouvez aussi utiliser cette syntaxe pour importer plusieurs modules avec moins d'écriture et en les rassemblant tous ensemble:
var {remote, ipcRenderer, someOtherModulFromElectron} = electron;
par exemple, dans le main.js (processus principal), nous pourrions écrire un tel appel:
const electron = require('electron')
const {app, BrowserWindow, Menu} = electron;
au lieu de :
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
Ce code fonctionne dans le script du fichier html:
const remote = require('electron').remote
const dialog = remote.dialog;
dialog.showErrorBox('Error title', 'error')
Vous pouvez directement le récupérer à l'aide de la syntaxe suivante:
const electron = require('electron')
const {dialog} = electron;
Et vous pouvez ensuite appeler les méthodes de dialogue requises comme ci-dessous:
dialog.showOpenDialog({ properties: ['openFile'] }, (filename) => {
console.log(filename.toString());
});