【问题标题】:Calling a function of main process调用主进程的函数
【发布时间】:2018-01-21 07:35:21
【问题描述】:

我试图在单击按钮时从另一个Javascript 文件调用主进程的函数。代码如下:

ma​​in.js

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

app.on('ready', () => {
let win = new BrowserWindow({width:800,height:600})
win.loadURL(`file://${__dirname}/index.html`)
})

exports.openWindow = () => {
alert("Hello Javatpoint");
}

index.html

<!doc html>
<html>
<head>
<title>
Test 1
</title>
</head>

<body>
<h1>Hello world</h1>
<script src="index.js"></script>
</body>
</html>

index.js

const main = require('electron').remote.require('./main')


var button = document.createElement('button')
button.textContent = 'Open'
button.addEventListener('click',() => {
main.openWindow()
}, false)
document.body.appendChild(button)

当我单击按钮时,它应该会显示一个警告对话框。但它没有显示任何东西。我是电子新手。我想知道它不起作用的原因。请帮忙。

【问题讨论】:

  • 你想达到什么目的?
  • 当我点击按钮时,它应该会显示一个警告对话框。但它没有显示任何内容
  • 但是为什么来自 main.js 文件?主进程中的代码不应该做任何与渲染进程相关的事情,所以你可以简单地用你的函数创建另一个 JS 文件,然后在你的 index.js 文件中使用它。或者,如果你“知道”你在做什么并且真的需要从主进程执行 JS,那么请检查这个问题:stackoverflow.com/questions/28920621/…
  • 对不起,我的问题误导了你。我已经编辑过了。我有替代解决方案。但我想知道它不起作用的原因。

标签: javascript html electron


【解决方案1】:

代码有效,函数被导出,唯一的错误是在主进程内部,警报函数不存在。您只能查看控制台,您应该会看到错误:

警报功能在主进程 (main.js) 中不可用,因为这不是渲染器进程。您可以使用 console.log 更改警报,这应该可以:

exports.openWindow = () => {
    // You should see this data on the console that
    // starts electron, not in the JavaScript console of electron !
    console.log("Hello Javatpoint");
};

在此过程中,您无法直接访问 DOM 函数。如前所述,要查看图形结果,您可以执行 console.log 以查看启动 Electron 应用程序的控制台上的字符串:

正确的方法

如果你想遵循标准,你可以使用电子的ipcMainipcRenderer

ma​​in.js

const {ipcMain} = require('electron');

ipcMain.on('open-window', (event, arg) => {
// prints "ping"
console.log(arg);

event.sender.send('open-window-response', 'pong');
})

index.js

const {ipcRenderer} = require('electron');

ipcRenderer.on('open-window-response', (event, arg) => {
    // prints "pong" in the JS console (chromium)
    console.log(arg);
});

var button = document.createElement('button');

button.textContent = 'Open';

button.addEventListener('click',() => {

     ipcRenderer.send('open-window', 'ping');

}, false);  

document.body.appendChild(button)

【讨论】:

  • 我使用 Atom 作为编辑器和命令提示符来运行代码。它没有显示任何错误。你能告诉我在哪里以及如何看到这些错误吗?这个问题可能看起来很傻。但我真的很难理解这些事情。提前致谢
  • @RifatAraTasnim 很好,使用提供的代码,您应该不会看到任何错误。您可以运行示例代码来自行分析其工作原理。你可以阅读这篇文章以获得更多帮助:ourcodeworld.com/articles/read/537/…
猜你喜欢
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-30
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多