使用Electron,我正在尝试在main和renderer之间组织IPC。如指示所述,我应该将脚本(请参见标题)添加到index.html。但它看起来不像是已加载。 rendeder.js中的任何内容都不会执行。
这是本教程https://www.brainbell.com/javascript/ipc-communication.html中的内容,它是Internet上最详细的主题。其他人只是在文章中跳过了太多信息,以至于学习者根本无法在应用程序中复制它。
我尝试过:
<script>
require('renderer.js')
</script>
<script>
require('./renderer.js')
</script>
<script src='renderer.js'>
</script>
类似。
答案 0 :(得分:1)
所以让我展示我的工作,也许会有所帮助。
创建窗口的代码。请注意webPreferences
设置
app.on('ready', function () {
mainWindow = new BrowserWindow({
show: false,
width: 1024,
height: 768,
backgroundColor: '#2C3E50',
center: true,
webPreferences: {
nodeIntegration: true,
devTools: true
}
})
没有devtools,您将看不到错误输出或检查内容。还有其他方法可以通过菜单和键盘命令打开devTools
。
然后,假设您已通过npm
安装了脚本或lib,则可以执行以下操作而无需指定路径,否则将需要相对路径
const THREE = require('three')
答案 1 :(得分:1)
我遇到了同样的问题。
首先,请确保在启动应用程序时打开nodeIntegration:
app.on('ready', _ => {
mainWindow = new BrowserWindow({
title: "My Electron App",
backgroundColor: '#FFF',
height: 800,
width: 1200,
center: true,
webPreferences: {
nodeIntegration: true // works on main window only
}
})
然后,引用this answer。
使用require
和src=
方法都可以玩多个选项。请参阅下面的其他行内注释。
<html>
<head>
<!-- make sure you have the semicolon after the require -->
<!-- and make sure NOT to include the .js extension -->
<script>require('./renderer');</script>
<!-- make sure you include the extension -->
<script src="./renderer.js" ></script>
</head>
<body>
<!-- Put HTML first to avoid blocking -->
<!-- All same options as in head work here, but shouldn't block -->
<!-- In addition, async and defer might do something -->
<!-- async should run script asynchronously, and defer wait until DOM loads -->
<script src="./renderer.js" async></script>
<script src="./renderer.js" defer></script>
</body>
<!-- scripts put here seems intermittent which runs first -->
</html>
<!-- scripts put here seems intermittent which runs first -->
有些人会阻止HTML加载,直到脚本运行为止(我想如果在head
标记中,无论如何),而另一些人则似乎随机认为HTML是否会在脚本运行之前加载。我在renderer.js
中使用了一个警告框进行了测试,如果该警告框首先运行,它将阻止该窗口显示HTML渲染。