admin管理员组文章数量:1332881
I am having trouble with my Electron app. I had it working about 9 months ago, but now the custom minimise and maximise buttons I made are not functioning properly.
Here is my file structure
node_modules
...
web
css
main.css
html
index.html
images
...
js
index.js
themes
...
main.js
package.json
package-lock.json
require.js
And here is the contents of index.html
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="../css/main.css">
<style type="text/css">* {visibility: hidden;}</style>
<link href="+Sans+Pro:400,600,700" rel="stylesheet">
<link rel="icon" href="../images/favicon-32x32.png" />
</head>
<body>
<div id="wrapper">
<div id="title-bar">
<div id="title-bar-btns">
<button id="min-btn" onclick="window_minimise()">—</button>
<button id="close-btn" onclick="window_close()">✕</button>
</div>
</div>
...
</div>
<script>
// You can also require other files to run in this process
require('../../renderer.js')
</script>
<script src="../js/index.js" type="text/javascript"></script>
</body>
</html>
And index.js
...
const {BrowserWindow} = require('electron').remote;
function window_minimise(){
let window = BrowserWindow.getCurrentWindow();
window.minimize();
}
function window_close(){
let window = BrowserWindow.getCurrentWindow();
window.close();
}
...
And here is my main.js
file
const {app, BrowserWindow} = require('electron')
let mainWindow
function createWindow () {
let mainWindow = new BrowserWindow({
width: 1200,
height: 748,
icon:'web/images/favicon-32x32.png',
resizable: false,
frame: false,
show: false,
backgroundColor: '#171717',
webPreferences: {
nodeIntegration: true
}
})
mainWindow.once('ready-to-show', () => {
mainWindow.show()
})
mainWindow.setMenu(null);
mainWindow.loadURL('http://localhost:8000/html/index.html')
mainWindow.on('closed', function () {
mainWindow = null
})
}
app.on('ready', createWindow)
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})
app.on('activate', function () {
if (mainWindow === null) createWindow()
})
When I click minimise or maximise, nothing happens. So I went to http://localhost:8000/html/index.html and checked the console, and I saw these errors
Uncaught ReferenceError: require is not defined at index.html:137
Uncaught ReferenceError: require is not defined at index.js:110
I am using electron version 5.0.2 by the way.
If someone could help me resolve this, that would be wonderful.
Thanks.
EDIT: The errors I mentioned above are shown when the page loads, and this error is shown when I click minimise
Uncaught ReferenceError: Cannot access 'BrowserWindow' before initialization at window_minimise (index.js:113) at HTMLButtonElement.onclick (index.html:18)
EDIT2: I think the issue is that eel (the code that allows me to interface python with my electron app) requires the webpage to be run on localhost, and thus node features such as require
do not work. I go into a bit more detail in a GitHub issue here: github/ChrisKnott/Eel/issues/147
I am having trouble with my Electron app. I had it working about 9 months ago, but now the custom minimise and maximise buttons I made are not functioning properly.
Here is my file structure
node_modules
...
web
css
main.css
html
index.html
images
...
js
index.js
themes
...
main.js
package.json
package-lock.json
require.js
And here is the contents of index.html
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="../css/main.css">
<style type="text/css">* {visibility: hidden;}</style>
<link href="https://fonts.googleapis./css?family=Source+Sans+Pro:400,600,700" rel="stylesheet">
<link rel="icon" href="../images/favicon-32x32.png" />
</head>
<body>
<div id="wrapper">
<div id="title-bar">
<div id="title-bar-btns">
<button id="min-btn" onclick="window_minimise()">—</button>
<button id="close-btn" onclick="window_close()">✕</button>
</div>
</div>
...
</div>
<script>
// You can also require other files to run in this process
require('../../renderer.js')
</script>
<script src="../js/index.js" type="text/javascript"></script>
</body>
</html>
And index.js
...
const {BrowserWindow} = require('electron').remote;
function window_minimise(){
let window = BrowserWindow.getCurrentWindow();
window.minimize();
}
function window_close(){
let window = BrowserWindow.getCurrentWindow();
window.close();
}
...
And here is my main.js
file
const {app, BrowserWindow} = require('electron')
let mainWindow
function createWindow () {
let mainWindow = new BrowserWindow({
width: 1200,
height: 748,
icon:'web/images/favicon-32x32.png',
resizable: false,
frame: false,
show: false,
backgroundColor: '#171717',
webPreferences: {
nodeIntegration: true
}
})
mainWindow.once('ready-to-show', () => {
mainWindow.show()
})
mainWindow.setMenu(null);
mainWindow.loadURL('http://localhost:8000/html/index.html')
mainWindow.on('closed', function () {
mainWindow = null
})
}
app.on('ready', createWindow)
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})
app.on('activate', function () {
if (mainWindow === null) createWindow()
})
When I click minimise or maximise, nothing happens. So I went to http://localhost:8000/html/index.html and checked the console, and I saw these errors
Uncaught ReferenceError: require is not defined at index.html:137
Uncaught ReferenceError: require is not defined at index.js:110
I am using electron version 5.0.2 by the way.
If someone could help me resolve this, that would be wonderful.
Thanks.
EDIT: The errors I mentioned above are shown when the page loads, and this error is shown when I click minimise
Uncaught ReferenceError: Cannot access 'BrowserWindow' before initialization at window_minimise (index.js:113) at HTMLButtonElement.onclick (index.html:18)
EDIT2: I think the issue is that eel (the code that allows me to interface python with my electron app) requires the webpage to be run on localhost, and thus node features such as require
do not work. I go into a bit more detail in a GitHub issue here: github./ChrisKnott/Eel/issues/147
- Look's like you can find answere here – Timofey Goncharov Commented May 25, 2019 at 10:24
- @TimofeyGoncharov If you read my post you would realise I already have nodeIntegration set to true – Jack P Commented May 25, 2019 at 10:26
- please provide the full version of index.js since errors refer to specific lines on that file – CodeRonin Commented May 25, 2019 at 10:38
- @GJCode I have provided the lines surrounding and including where the error is – Jack P Commented May 25, 2019 at 10:39
- you cannot use require in a normal browser. JS run in a sandbox in a normal browser and require makes use of the filesystem that is not accessible from a browser. What electron does is wrap your app in chromium browser and run js outside that sandbox and this is why with electron (and node) you can use require and the filesystem. This is way you get that errors on your console, they are not related to your problem – CodeRonin Commented May 25, 2019 at 10:50
2 Answers
Reset to default 6All you need to do is add contextIsolation: false
after nodeIntegration: true
in the webPreferences
object
Change your index.js
file as follows. Then use nodeRequire
instead of require
keyword.
initNodeRequire();
const {BrowserWindow} = nodeRequire('electron').remote;
function window_minimise(){
let window = BrowserWindow.getCurrentWindow();
window.minimize();
}
function window_close(){
let window = BrowserWindow.getCurrentWindow();
window.close();
}
function initNodeRequire(){
window.nodeRequire = require;
delete window.require;
delete window.exports;
delete window.module;
}
本文标签: javascriptUncaught ReferenceError require is not defined (electron)Stack Overflow
版权声明:本文标题:javascript - Uncaught ReferenceError: require is not defined (electron) - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742307216a2450157.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论