2016-04-15 8 views
5

Sto utilizzando l'elettrone e sto tentando di aprire un browser di file quando un utente fa clic sul pulsante. Dal processo di rendering sto cercando di includere il pacchetto elctron.dialog come questo.La richiesta di dialogo di elettroni dal processo di rendering non è definita

const dialog = require('electron').dialog; 

console.log(dialog); 

Tuttavia il risultato del log della console è undefined

Sono assolutamente sicuro che io sono nel processo di rendering, quindi non sono sicuro perché questo non sta funzionando. La documentazione suggerisce che questo è il modo corretto di fare le cose ma sembra non funzionare.

Questo è il mio file di package.json

{ 
    "name": "my-app", 
    "version": "0.1.0", 
    "main": "./main.js", 
    "scripts": { 
    "start": "electron ." 
    }, 
    "dependencies": { 
    "electron": "^0.4.1" 
    } 
} 

Questo è il mio file di 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(); 
     } 
    ); 

questo è il processo di rendering di file

// Add your index.js code in this file 
    var ipc = require('ipc'); 

    const dialog = require('electron').dialog; 

    console.log(dialog); 

Questa è la console

Non è corretto?

+0

Hai provato il modulo remoto? 'const dialog = require ('electron'). remote.dialog' – Philip

risposta

3

Dopo alcune ore di ricerca in esso someone else mi ha fatto notare che il modo "nuovo" (4/15/16) di fare questo è il seguente.

var remote = require('remote'); 
var dialog = remote.require('dialog'); 

dialog.showOpenDialog({ 
    properties: [ 'openFile' ] }, function (filename) { 
    console.log(filename.toString()); 
    } 
); 

È necessario richiedere remote e poi da remoto richiedono finestra. Sembra che non c'è più bisogno di richiedere electron

14

Nel processo di Renderer, è necessario utilizzare il modulo Remoto.

const dialog = require('electron').remote.dialog 

Maggiori informazioni:
Electron Dialog API
Electron Remote API

+0

Ho postato la mia soluzione sopra. Il tuo metodo sembra funzionare in alcune altre versioni ma non nel mio. –

1

Questo codice funziona nello script del file HTML:

const remote = require('electron').remote 

const dialog = remote.dialog; 

dialog.showErrorBox('Error title', 'error') 
0

Electron nella versione più recente hanno cambiato il modo di richiedere i moduli. I moduli sono incapsulati all'interno dello spazio dei nomi dell'elettrone.

// 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; 

Inoltre è possibile utilizzare questa sintassi, per importare più moduli con meno di scrittura e con la raccolta di tutti insieme:

var {remote, ipcRenderer, someOtherModulFromElectron} = electron; 

ad esempio nei main.js (processo principale) potremmo scrivere come una chiamata:

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

al posto di:

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 
Problemi correlati