JavaScript-未定义文档(Electron)



我想在用户按下按钮时更改背景颜色。

我有两个主要功能:darkTheme()用于暗模式,lightTheme()用于亮模式。

JavaScript

function changeAppearence() {
let themeForPage = localStorage.getItem('theme');
if (themeForPage === 'light'){
lightTheme();
} else if (themeForPage === 'dark'){
darkTheme();
} else {
darkTheme();
}
}
function darkTheme() {
localStorage.setItem('theme', 'dark');
document.getElementById('headerMainMenu').style.backgroundColor = '#212529';
document.body.style.backgroundColor = '#343a40';
document.body.style.color = 'white';
}
function lightTheme() {
localStorage.setItem('theme', 'light');
document.getElementById('headerMainMenu').style.backgroundColor = 'white';
document.body.style.backgroundColor = 'white';
document.body.style.color = 'white';
}

但在键入npm start命令后,我得到了以下错误:

错误消息:

App threw an error during load
ReferenceError: document is not defined
at darkTheme (/Users/user/Documents/#4_Website_ Development/Electron/electron-app/main.js:76:3)
at changeAppearence (/Users/user/Documents/#4_Website_ Development/Electron/electron-app/main.js:15:5)
at Object.<anonymous> (/Users/user/Documents/#4_Website_ Development/Electron/electron-app/main.js:8:1)
at Module._compile (internal/modules/cjs/loader.js:1078:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1108:10)
at Module.load (internal/modules/cjs/loader.js:935:32)
at Module._load (internal/modules/cjs/loader.js:776:14)
at Function.f._load (electron/js2c/asar_bundle.js:5:12913)
at loadApplicationPackage (/Users/user/Documents/#4_Website_ Development/Electron/electron-app/node_modules/electron/dist/Electron.app/Contents/Resources/default_app.asar/main.js:110:16)
at Object.<anonymous> (/Users/user/Documents/#4_Website_ Development/Electron/electron-app/node_modules/electron/dist/Electron.app/Contents/Resources/default_app.asar/main.js:222:9)

我还尝试在JavaScript文件中制作一个简单的document.body.style.color = 'white';,但没有任何函数,但我得到了同样的错误。

您在哪里调用这些函数?看起来您正试图从主进程调用它们,主进程在节点中运行,并且不能直接访问DOM。您可以使用ipcRendereripcMain以及contextBridge在渲染器进程和主进程之间进行通信,但从上下文中不清楚这些函数是否应该在主进程中。我最初的想法是,这些应该只在渲染器进程中,因为这只会影响渲染窗口,而不会全局影响应用程序。

最新更新