Je crée une application Electron pour mes propres besoins. Mon problème est que lorsque j'utilise des fonctions de nœud dans ma page HTML, une erreur de:
'require ()' n'est pas défini.
Existe-t-il un moyen d'utiliser les fonctionnalités de Node dans toutes mes pages HTML? Si possible, donnez-moi un exemple de la procédure à suivre ou indiquez un lien. Voici les variables que j'essaie utiliser dans ma page HTML:
var app = require('electron').remote;
var dialog = app.dialog;
var fs = require('fs');
et ce sont les valeurs que j'utilise dans toutes mes fenêtres HTML dans Electron.
A partir de la version 5, la valeur par défaut pour nodeIntegration
est passée de true à false. Vous pouvez l'activer lors de la création de la fenêtre du navigateur:
app.on('ready', () => {
mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: true
}
});
});
Pour des raisons de sécurité, vous devez conserver nodeIntegration: false et utiliser un script de préchargement pour exposer au processus de rendu tout ce dont vous avez besoin de l'API Node/Electron ) via la variable de fenêtre.
Les scripts de préchargement continuent d’avoir accès à require et à d’autres fonctionnalités de Node.js
https://electronjs.org/docs/tutorial/security#2-do-not-enable-nodejs-integration-for-remote-content
Exemple:
//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();
});
Utilises-tu nodeIntegration: false
pendant l’initialisation de BrowserWindow? Si tel est le cas, définissez-le sur true
(la valeur par défaut est true
).
Et incluez vos scripts externes dans le code HTML comme ceci (pas comme <script> src="./index.js" </script>
):
<script>
require('./index.js')
</script>
Enfin, je l'ai fait fonctionner. Ajoutez ce code à votre élément HTML Script Element.
Désolé pour le retard Reply.I utilise le code ci-dessous pour faire cette chose.
window.nodeRequire = require;
delete window.require;
delete window.exports;
delete window.module;
Et utilisez nodeRequire
au lieu d’utiliser require
.
Ça fonctionne bien.