Forum: PC-Programmierung Web-Anwendung mit Electron.js Einfacher Button Click funktioniert nicht


von Robert M. (andro86)


Lesenswert?

Guten Morgen zusammen,

ich weiß nicht, ob das hier das passende Forum dafür ist, aber ich 
probiere es denoch mal.
Ich versuche über Electron.js eine einfache Anwendung zu entwerfen. 
Einfach im Sinne von: Es gibt ein Button und bei einem Click soll man 
eine .txt-Datei hochladen können. Wenn ich die Anwendung starte baut es 
wie gewollt ein Windowsfenster samt Button auf. Doch nach einem Klick 
auf den Button öffnet sich nicht wie erwartet das Filesystem von 
Windows, sondern es passiert rein gar nichts. Ich hoffe hier findet sich 
Jemand, der mal einen Blick über mein Code werfen und mir ggf. sagen 
kann wo es noch hackt.

Der Code dafür ist folgender:
1
package.json:
2
3
{
4
  "name": "Routingtable_Splitter",
5
  "version": "1.0.0",
6
  "description": "...",
7
  "main": "main.js",
8
  "scripts": {
9
    "start": "electron .",
10
    "pack": "build --dir",
11
    "dist": "build",
12
    "package-win": "electron-packager . Splitter --overwrite --asar=true --platform=win32 --arch=ia32"
13
  },
14
  "build": {
15
    "win": {
16
      "target": "squirrel",
17
      "icon": "build/icon.ico"
18
    }
19
  },
20
  "author": "Robert Malleschitz",
21
  "license": "ISC",
22
  "devDependencies": {
23
    "dialog": "^0.3.1",
24
    "document": "^0.4.7",
25
    "electron": "^2.0.4",
26
    "electron-builder": "^20.19.1",
27
    "electron-packager": "^12.1.0",
28
    "electron-winstaller": "^2.6.4",
29
    "fs": "0.0.1-security",
30
    "remote": "^0.2.6"
31
  },
32
  "dependencies": {}
33
}
1
index.html
2
3
<!DOCTYPE html>
4
  <html>
5
    <head>
6
      <meta charset="UTF-8">
7
      <title>IKI-50_104 Tool</title>
8
    </head>
9
    <body>
10
      <h1>Routingtable Splitter</h1>
11
      <main>
12
        <div>
13
          <div style="text-align:right;">
14
            <input type="text" placeholder="Bitte Routingtabelle laden" style="width: 260px" id="actual-file" disabled="disabled"/>
15
            <input type="submit" value="Routingtabelle laden" id="load-file"/>
16
            <br><br>
17
            <textarea id="editor" style="width: 400px; height: 300px;"></textarea><br />
18
            <input type="button" id="splitTable" value="Split" />
19
          </div>
20
        </div>
21
      </main>
22
    </body>
23
    <script src="renderer.js"></script> 
24
 </html>
1
main.js:
2
3
const {app, BrowserWindow} = require('electron')
4
const {Menu} = require('electron')
5
const {dialog} = require('electron')
6
const {remote} = require('electron')
7
const {document} = require('electron')
8
const {ipcMain} = require('electron')
9
var path = require('path')
10
11
var electronInstaller = require('electron-winstaller')
12
13
let win = null;
14
15
function createWindow () {
16
  // Create the browser window.
17
  win = new BrowserWindow({
18
  width: 1200,
19
  height: 1000,
20
  })
21
  win.loadFile('index.html')
22
}
23
24
const menuTemplate = [
25
  {
26
    label: 'Datei',
27
    submenu: [
28
      {
29
        label: 'Lade', click: () => {getRoutingTable();}
30
      },
31
      {
32
        label: 'Beenden', click: () => {app.quit();}
33
      }
34
    ]
35
  }
36
];
37
38
function getRoutingTable(){
39
  dialog.showOpenDialog(
40
  {
41
    defaultPath: 'c./',
42
    filters: [
43
      { name: 'Text Files', extensions: ['txt'] }
44
    ],
45
    properties:['openFile']
46
  })
47
}
48
49
const menu = Menu.buildFromTemplate(menuTemplate);
50
Menu.setApplicationMenu(menu);
51
52
app.on('ready', createWindow)
53
{
54
  console.log('app')
55
}
56
57
ipcMain.on('ldFileBtn', function (event, arg) {
58
  console.log('ipcMain');
59
  getRoutingTable();
60
  event.sender.send("btnclick-task-finished", "yes");
61
});
1
renderer.js:
2
3
const ipcRen = require('electron').ipcRenderer;
4
const ldFileBtn = document.getElementById('load-file');
5
ldFileBtn.addEventlistener('click', function() {
6
  console.log('btn_click')
7
  var arg = 'secondparam';
8
  //send the info to main process . we can pass any arguments as second param.
9
 ipcRen.send('ldFileBtn', arg); // ipcRender.send will pass the information to main process
10
});

: Bearbeitet durch User
von Entwickler (Teamleiter) (Gast)


Lesenswert?


von M.K. B. (mkbit)


Lesenswert?

Ich dachte erst das geht doch gar nicht, aber du bist ja nicht im 
Browser, sondern in Electron.js unterwegs.

Hilfreich wäre der Output auf der Debugkonsole, damit man mal sieht, wo 
dein Code überhaupt vorbeikommt. Das console.log dafür ist ja schon da. 
Vielleicht siehst du da auch irgendwelche Exceptions, die dazu führen, 
das der Aufruf abbricht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.