作者:手浪用户2602886151 | 来源:互联网 | 2023-02-01 23:17
我正在为自己的目的创建Electron应用程序。我的问题是,当我在HTML页面中使用节点函数时,它引发以下错误:
未定义'require()'。
有没有办法在我所有的HTML页面中使用Node功能?如果可能的话,请给我举个例子,或者提供一个链接。以下是我要在HTML页面中尝试使用的变量:
var app = require('electron').remote;
var dialog = app.dialog;
var fs = require('fs');
这些是我在Electron的所有HTML窗口中使用的值。
1> 小智..:
从版本5开始,默认值nodeIntegration
从true更改为false。您可以在创建浏览器窗口时启用它:
app.on('ready', () => {
mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: true
}
});
});
@PauloHenrique`nodeIntegration:true`仅在您在应用程序上执行一些不受信任的远程代码时才有安全风险。例如,假设您的应用程序打开了第三方网页。这将带来安全风险,因为第三方网页将有权访问节点运行时,并且可以在用户的文件系统上运行某些恶意代码。在这种情况下,设置`nodeIntegration:false`是有意义的。如果您的应用程序不显示任何远程内容,或仅显示受信任的内容,则可以设置“ nodeIntegration:true”。
非常感谢...我的require()不起作用,直到我添加了这个
2> 小智..:
出于安全原因,您应该保留nodeIntegration: false
并使用预加载脚本,以通过window变量将需要的Node / Electron API暴露给渲染器进程(视图)。从电子文档:
预加载脚本仍然可以访问require
和其他Node.js功能
例
main.js
const mainWindow = new BrowserWindow({
webPreferences: {
preload: path.join(app.getAppPath(), 'preload.js')
}
})
preload.js
const { remote } = require('electron');
let currWindow = remote.BrowserWindow.getFocusedWindow();
window.closeCurrentWindow = function(){
currWindow.close();
}
renderer.js
let closebtn = document.getElementById('closebtn');
closebtn.addEventListener('click', (e) => {
e.preventDefault();
window.closeCurrentWindow();
});
3> RoyalBingBon..:
您正在使用nodeIntegration: false
BrowserWindow初始化时吗?如果是这样,请将其设置为true
(默认值为true
)。
并在HTML中包含您的外部脚本,而不是这样
: