HTML 加载,但脚本不加载 运行

HTML loads, but scripts don't run

我已经通过 Parcel 编译了这个脚本:

/src/Main.ts

import { app, BrowserWindow, Menu } from 'electron';

alert('Hi');
document.title = 'Xxx';
console.log('Hello');

包裹条目 HTML:

/src/Main.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
    <meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; script-src 'self'">
    <title>Empty Electron App</title>
  </head>
  <body>
    <script>alert('Aaaaah!');
    </script>
    <script src="./Main.ts"></script>
  </body>
</html>

我使用以下方式与 Parcel 捆绑:

/build.js

// ...
const entry = './src/Main.html';
const options = {
    outDir: './build',
    publicUrl: './',
    sourceMaps: false,
    autoInstall: false,
    hmr: false,
    target: 'electron',
};

// ...
(async () => {
    // ...
    bundler.bundle();
})();

似乎 Electron 不是 运行 入口点 HTML 中包含的脚本(既不提醒也不改变页面标题也不登录到控制台)。就像我说的,console.log() 不会对主机环境终端 运行 Electron 产生任何东西。我通过在 HTML 中插入文本节点进一步测试了这一点,如下所示:

<!DOCTYPE HTML>
<html>
<head>
    <!-- ... -->
</head>
<body>
    Foo foo foo foo foo
</body>
</html>

应用呈现 Foo foo foo foo foo 成功;脚本什么都不做。我是否缺少某些配置?

这里有更多来源:

这是输出 HTML 的样子:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
    <meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; script-src 'self'">
    <title>Empty Electron App</title>
  </head>
  <body>
    <script>alert('Aaaaah!');</script>
    <script src="Main.d562fc5b.js"></script>
  </body>
</html>

文件结构(/build):

在您的 build.js 文件中,将 target 选项替换为 web 而不是 electron

更新:我实际上找到了一个更好的解决方案来解决您的问题,因为您有时可能需要在应用程序中使用正确的目标。见下文:

问题是 nodeIntegration 没有在您的 BrowserWindow 上启用,尽管您在选项中指定了它。这是因为默认情况下 contextIsolation 处于打开状态,这两个选项不能一起使用。在构建 window 时在 webPreferences 中添加 contextIsolation: false 也应该可以解决您的问题,同时将包裹目标保持在 electron.