我正在尝试在电子index.html按钮点击中执行bash脚本。下面是我的代码,index.html调用renderer.js,renderer.js打开bash脚本。当我运行代码时,我看到一个可以点击的按钮,但即使我点击它,我也看不到stdout终端的“Hello World”。有人有什么建议可以解决这个问题吗?任何帮助都非常感谢!
索引.html
<h0>My-Flection</h0>
<button id="openBtn">Open</button>
<script>
require('./renderer.js')
</script>
渲染器.js
const openBtn = document.getElementById('openBtn')
const shell = require('electron').shell
openBtn.addEventListener('click', function(event) {
shell.openItem("./test.sh")
})
测试.sh
echo "Hello World"
1条答案
按热度按时间tjvv9vkg1#
Electron的
shell
方法并不是真的用来运行脚本的,它是用来在系统文件管理器中显示一个文件,“以桌面默认方式”打开一个文件,将文件移到垃圾箱/回收站,以及播放哔哔声等等。当你使用Electron时,你应该充分利用不同的进程,在主进程中运行你的脚本。这样做可以防止任何可能的渲染进程锁定(如果你愿意,还可以分开你的关注点)。
下面是一个
preload.js
脚本,它允许通过使用白名单通道名称在主进程和渲染进程之间进行通信。此preload.js
脚本中的唯一实现是使用ipcRenderer
。有关详细信息,请参阅Context Isolation和Inter-Process Communication在这个
preload.js
脚本中,我们使用通道名称runScript
从渲染进程与主进程通信。preload.js
(主进程)此
preload.js
脚本的用法如下...在此
main.js
脚本中,侦听通道名称runScript
上的消息,然后使用spawn
运行脚本。exec
可以在不需要流式传输的情况下使用。IE:exec
缓冲输出。main.js
(主流程)一些测试脚本。
test.bat
(适用于Windows)test.sh
(适用于MacOS和Linux)最后,这里是一个简化的
index.html
文件,在button
click
上,send
通过通道名runScript
向主进程发送消息。index.html
(渲染进程)