【问题标题】:Unable to access __dirname variable in Renderer Process, in an ElectronJS app在 ElectronJS 应用程序中,无法访问渲染器进程中的 __dirname 变量
【发布时间】:2020-08-28 14:37:53
【问题描述】:

我现在正在尝试从“Electron in Action”一书中学习 ElectronJS (https://www.amazon.com/Electron-Action-Steve-Kinney/dp/1617294144/)。

我遇到困难的代码是我通过加载到渲染器进程窗口的 HTML 文件中 <script> 标记中的 JS 代码,尝试访问 __dirname 变量(即通常仅在 node 中可用,但在 Electron 中,应该也可用于 Chromium 上下文)。

对于任何感兴趣的人,这是清单 2.8(第 28 页)。代码如下:

<!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>
        
        <script>
            const button = document.querySelector('.alert');

            button.addEventListener('click', ()=> {alert(__dirname);});
        </script>
    </body>
</html>

这是主进程的代码:

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

let main_window = null;

app.on('ready',
() =>
{
    console.log('Hello from Electron');
    main_window = new BrowserWindow();

    main_window.webContents.loadFile('app/index.html');
}
);

但它不起作用。在 Rendering Window 的开发者控制台中,每次单击按钮时,都会出现错误提示 __dirname 未定义。

我在下面附上了错误消息的屏幕截图:

我该如何解决这个问题?提前致谢。

【问题讨论】:

    标签: javascript node.js electron


    【解决方案1】:

    在 main.js 中创建窗口时将 nodeIntegration 设置为 true

        mainWindow = new BrowserWindow({
        width: 600,
        height: 300,
        webPreferences: {
          preload: path.join(__dirname, 'preload.js'),
          nodeIntegration:true
        }
      })
    

    【讨论】:

    • 我只在参数对象中提供了 webPreferences:{nodeIntegration:true} 对,它仍然对我有用。无论如何,谢谢:)
    猜你喜欢
    • 2020-02-12
    • 2021-06-22
    • 2017-05-01
    • 2021-06-01
    • 1970-01-01
    • 2021-11-28
    • 2010-09-08
    • 2019-07-17
    • 1970-01-01
    相关资源
    最近更新 更多