javascript - alert(__ dirname)在 Electron 应用程序中不产生任何输出

标签 javascript html electron

运行以下 Electron 应用程序时,我未获得所需的输出,即包含pwd作为输出的警报框。但是,index.html内的注释行似乎可以正常工作。 Chrome窗口的开发者控制台显示“Uncaught ReferenceError:在HTMLButtonElement。中未定义__dirname”。该摘录摘自史蒂夫·金尼(Steve Kinney)2019年版的《 Electron 在行动》一书中的逐字记录(注释行除外)。

有什么建议?

package.json如下

{
  "name": "bookmarker",
  "version": "1.0.0",
  "description": "electron app",
  "main": "./app/main.js",
  "scripts": {
    "start": "electron .",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Wasim Aftab",
  "license": "ISC",
  "dependencies": {
    "electron": "^9.0.0"
  }
}

main.js如下
const {app, BrowserWindow} = require('electron');
let mainWindow = null;
app.on ('ready', () => {
    console.log('Hello, from electron');
    mainWindow = new BrowserWindow();
    mainWindow.webContents.loadFile(__dirname + '/index.html');
});

index.html如下
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Security-Policy" content="
default-src 'self';
script-src 'self' 'unsafe-inline';
connect-src *">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>Bookmarker</title>
</head>

<body>
    <h1>Hello from Electron</h1>
    <p>
        <button class="alert">Current Directory</button>
    </p>
</body>
<script>
    const button = document.querySelector('.alert');
    button.addEventListener('click', () => {
        alert(__dirname);
        // alert(window.location.pathname.replace(/[^\\\/]*$/, ''));
    });
</script>

</html>

最佳答案

__dirname是一个nodejs概念,在浏览器中不存在。

解决此问题的一种方法是将nodeIntegration设置为true:

mainWindow = new BrowserWindow({
    webPreferences: {
        nodeIntegration: true
    }
});

另一种方法是使用预加载脚本(始终为预加载脚本启用nodeIntegration):
mainWindow = new BrowserWindow({
    webPreferences: {
        preload: (__dirname + "/preload.js")
    }
});

然后在preload.js文件中:
window.__dirname = __dirname

关于javascript - alert(__ dirname)在 Electron 应用程序中不产生任何输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62048570/

相关文章:

javascript - 有没有办法重用 ImageData 来减少 GC 事件?

angularjs - 选择Angular 2 + Electron应用程序的数据库

node.js - 如何在 Electron 中使用进度条

javascript - 冲浪者 : Spotty Canvas Graph Using lineTo() and Stroke()

javascript - 更改文本框时如何将 Javascript 事件处理程序绑定(bind)到 Ajax Control Toolkit 组合框

javascript - 仅匹配不在 &lt;script&gt; 或 <a> 标签中的字符串

node.js - 如何从 Visual Studio 调试 C++ Electron 插件

javascript - 如何在右侧而不是左侧打开 Materialise SideNav?

HTML <code> - 去掉换行符

php - 我如何发送包含在表格中的多个复选框