Я пытаюсь вызвать функцию при загрузке страницы. Однако обратный вызов при загрузке страницы содержит node.js вызовов, которые, кажется, прерваны.
Приложение использует electron-tab
для реализации представления с вкладками.
Код
Следующая HTML - это страница html, загруженная из вкладки: tab1.html
.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Security-Policy" content="
default-src 'self' 'unsafe-inline';
script-src 'self' 'unsafe-inline';
connect-src *">
<!-- <meta http-equiv="Content-Security-Policy" content="default-src * self blob: data: gap:; style-src * self 'unsafe-inline' blob: data: gap:; script-src * 'self' 'unsafe-eval' 'unsafe-inline' blob: data: gap:; object-src * 'self' blob: data: gap:; img-src * self 'unsafe-inline' blob: data: gap:; connect-src self * 'unsafe-inline' blob: data: gap:; frame-src * self blob: data: gap:;"> -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Transport</title>
<link rel="stylesheet" href="style.css" type="text/css">
<script type="text/javascript" src="myscript.js"></script>
</head>
<body onload="OnLoadTransport();">
</body>
</html>
JS
const Path = require('path')
const fs = require('fs');
const glob = require('glob');
function OnLoadTransport() {
alert('Here');
var filePaths = ListDir(__dirname, ".json");
alert(filePaths.length.toString());
for(var f=0; f<filePaths.length; f++) {
alert(filePaths[f]);
LoadJSON(filePaths[f], function (response) {
var jsonObj = JSON.parse(response);
alert(response);
});
}
}
function ListDir(rootDir, ext) {
if (!fs.existsSync(rootDir)) {
alert("no dir: " + rootDir);
return [];
}
var filePaths = fs.readdirSync(rootDir);
filePaths = filePaths.filter(file => file.endsWith(ext));
return filePaths;
};
function LoadJSON(path, callback) {
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', path, true); // Replace 'my_data' with the path to your file
xobj.onreadystatechange = function () {
if (xobj.readyState == 4 && xobj.status == "200") {
// Required use of an anonymous callback as .open will NOT return a value but simply returns undefined in asynchronous mode
callback(xobj.responseText);
}
};
xobj.send(null);
}
Средство визуализации
const { remote, ipcRenderer } = require('electron');
const TabGroup = require("electron-tabs");
const mainProc = remote.require('./main.js'); // plug in main process
const parser = new DOMParser();
let tabGroup = new TabGroup({
newTab: {
title: 'New Tab'
}
});
tabGroup.addTab({
title: 'Tab 1',
src: './tab1.html',
closable: false,
active: true
});
tabGroup.addTab({
title: "Tab 2",
src: './tab2.html',
closable: false,
// visible: true,
active: false // tab button is foregrounded
});
main.js
const {app, BrowserWindow} = require('electron');
let mainWindow = null;
app.on('ready', () => {
console.log('Hello from Electron');
mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: true,
webviewTag: true
}
});
// mainWindow.webContents.openDevTools()
mainWindow.webContents.loadFile('./app/index.html');
// mainWindow events, within app lifecycle
mainWindow.webContents.on('did-fail-load', function() {
console.log("Failed to load index.html");
})
})
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Security-Policy" content="
default-src 'self' 'unsafe-inline';
script-src 'self' 'unsafe-inline';
connect-src *">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>MAM Hub</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<!-- 2. Include the basic markup of the tabs view -->
<div class="etabs-tabgroup">
<div class="etabs-tabs"></div>
<div class="etabs-buttons"></div>
</div>
<div class="etabs-views"></div>
<!--
3. Include initialization code, you can include another js file
Or write directly the JS code here.
-->
<script>
// You can also require other files to run in this process
require('./renderer.js')
</script>
</body>
</html>
Ожидание
На странице загрузки Я ожидаю увидеть серию предупреждений:
Here
- Путь к найденному JSON файлу
- Содержимое файла JSON
Наблюдение
С этим кодом я вижу предупреждение Here
. Но не более того. Тот же код, если запустить его в Electron renderer.js
, просто работает: я могу видеть предупреждения о найденном файле JSON и его содержимом.
Так что я предполагаю, что вызов fs
не сделал т работа. Однако в консоли Chromium ошибок нет.
Как включить поддержку node.js в этом случае? Пожалуйста, помогите.