Tweaks to Electron main.js

Former-commit-id: e41e9f2763bd0872ea1457dc8b827b1583debb9e [formerly 9cf10dbfc706a92608490797e9aa9f39018d4299 [formerly 84884723f6f6e3e432d35f0c4c2657c2a97b3e11]]
Former-commit-id: 1bddc09301b1124c0a91118ee8b40e1cec37e835
Former-commit-id: 7668c7e990a710dbcdc3794c23ca29253fb7406c
This commit is contained in:
Jaifroid 2020-11-11 21:15:40 +00:00
parent 421e203ff4
commit 0d09cac6ea

256
main.js
View File

@ -1,129 +1,129 @@
// Modules to control application life and create native browser window // Modules to control application life and create native browser window
const { const {
app, app,
protocol, protocol,
BrowserWindow, BrowserWindow,
shell shell
} = require('electron'); } = require('electron');
const path = require('path'); const path = require('path');
// This is used to set capabilities of the app: protocol in onready event below // This is used to set capabilities of the app: protocol in onready event below
// protocol.registerSchemesAsPrivileged([{ // protocol.registerSchemesAsPrivileged([{
// scheme: 'app', // scheme: 'app',
// privileges: { // privileges: {
// standard: true, // standard: true,
// secure: true, // secure: true,
// allowServiceWorkers: true, // allowServiceWorkers: true,
// supportFetchAPI: true // supportFetchAPI: true
// } // }
// }]); // }]);
// Keep a global reference of the window object, if you don't, the window will // Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected. // be closed automatically when the JavaScript object is garbage collected.
let mainWindow; let mainWindow;
function createWindow() { function createWindow() {
// Create the browser window. // Create the browser window.
mainWindow = new BrowserWindow({ mainWindow = new BrowserWindow({
titleBarStyle: 'hidden', titleBarStyle: 'hidden',
width: 1281, width: 1281,
height: 800, height: 800,
minWidth: 640, minWidth: 640,
minHeight: 480, minHeight: 480,
autoHideMenuBar: true, autoHideMenuBar: true,
icon: path.join(__dirname, 'www/img/icons/kiwix-64.png'), icon: path.join(__dirname, 'www/img/icons/kiwix-64.png'),
webPreferences: { webPreferences: {
nodeIntegration: false nodeIntegration: false
// contextIsolation: true, // contextIsolation: true,
, preload: path.join(__dirname, 'preload.js') , preload: path.join(__dirname, 'preload.js')
// , nativeWindowOpen: true // , nativeWindowOpen: true
// , webSecurity: false // , webSecurity: false
// , session: ses // , session: ses
// , partition: 'persist:kiwixjs' // , partition: 'persist:kiwixjs'
} }
}); });
// and load the index.html of the app. // and load the index.html of the app.
// mainWindow.loadURL(`https://${__dirname}/www/index.html`); // mainWindow.loadURL(`https://${__dirname}/www/index.html`);
// mainWindow.loadURL(`https://kiwix.github.io/kiwix-js-windows/`); // mainWindow.loadURL(`https://kiwix.github.io/kiwix-js-windows/`);
// DEV: If you need Service Worker more than you need document.cookie, load app like this: // DEV: If you need Service Worker more than you need document.cookie, load app like this:
mainWindow.loadFile('www/index.html'); mainWindow.loadFile('www/index.html');
//mainWindow.autoHideMenuBar = true; //mainWindow.autoHideMenuBar = true;
mainWindow.webContents.on('new-window', function(e, url) { mainWindow.webContents.on('new-window', function(e, url) {
// Make sure blob urls stay in electron perimeter // Make sure blob urls stay in electron perimeter
if(/^blob:/i.test(url)) { if(/^blob:/i.test(url)) {
return; return;
} }
// And open every other protocol in the OS browser // And open every other protocol in the OS browser
e.preventDefault(); e.preventDefault();
shell.openExternal(url); shell.openExternal(url);
}); });
// DEV: Enable code below to check cookies saved by app in console log // DEV: Enable code below to check cookies saved by app in console log
// mainWindow.webContents.on('did-finish-load', function() { // mainWindow.webContents.on('did-finish-load', function() {
// mainWindow.webContents.session.cookies.get({}, (error, cookies) => { // mainWindow.webContents.session.cookies.get({}, (error, cookies) => {
// console.log(cookies); // console.log(cookies);
// }); // });
// }); // });
// Open the DevTools. // Open the DevTools.
// mainWindow.webContents.openDevTools() // mainWindow.webContents.openDevTools()
// Emitted when the window is closed. // Emitted when the window is closed.
mainWindow.on('closed', function () { mainWindow.on('closed', function () {
// Dereference the window object, usually you would store windows // Dereference the window object, usually you would store windows
// in an array if your app supports multi windows, this is the time // in an array if your app supports multi windows, this is the time
// when you should delete the corresponding element. // when you should delete the corresponding element.
mainWindow = null; mainWindow = null;
}); });
} }
// let dirnameParts = __dirname.match(/[^\/\\]+(?:[\/\\]|$)/g); // let dirnameParts = __dirname.match(/[^\/\\]+(?:[\/\\]|$)/g);
// This method will be called when Electron has finished // This method will be called when Electron has finished
// initialization and is ready to create browser windows. // initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs. // Some APIs can only be used after this event occurs.
app.on('ready', () => { app.on('ready', () => {
// //protocol.registerFileProtocol('app', (request, callback) => { // //protocol.registerFileProtocol('app', (request, callback) => {
// protocol.registerHttpProtocol('app', (request, callback) => { // protocol.registerHttpProtocol('app', (request, callback) => {
// const url = request.url.replace(/^app:\/\/([^?#]*?)([^?#\/\\]+)([#?].*$|$)/, function(_p0, relPath, linkUrl, hash) { // const url = request.url.replace(/^app:\/\/([^?#]*?)([^?#\/\\]+)([#?].*$|$)/, function(_p0, relPath, linkUrl, hash) {
// let replaceLink = relPath + linkUrl; // let replaceLink = relPath + linkUrl;
// // This prevents the querystring from being passed to Electron on main app reload // // This prevents the querystring from being passed to Electron on main app reload
// if (/www\/index\.html/.test(replaceLink)) return replaceLink; // if (/www\/index\.html/.test(replaceLink)) return replaceLink;
// return replaceLink + hash; // return replaceLink + hash;
// }); // });
// //let returnPath = path.normalize(`${__dirname}/${url}`); // //let returnPath = path.normalize(`${__dirname}/${url}`);
// let returnPath = __dirname + '/' + url; // let returnPath = __dirname + '/' + url;
// returnPath = path.normalize(returnPath); // returnPath = path.normalize(returnPath);
// console.log(returnPath); // console.log(returnPath);
// callback({ // callback({
// path: returnPath // path: returnPath
// // url: 'file://' + path.normalize(`${__dirname}/${url}`), // // url: 'file://' + path.normalize(`${__dirname}/${url}`),
// // method: 'GET' // // method: 'GET'
// }); // });
// // console.log(path.normalize(`${__dirname}/${url}` + ':' + url)); // // console.log(path.normalize(`${__dirname}/${url}` + ':' + url));
// }, (error) => { // }, (error) => {
// if (error) console.error('Failed to register protocol'); // if (error) console.error('Failed to register protocol');
// }); // });
// Create the new window // Create the new window
createWindow(); createWindow();
}); });
// Quit when all windows are closed. // Quit when all windows are closed.
app.on('window-all-closed', function () { app.on('window-all-closed', function () {
// On macOS it is common for applications and their menu bar // On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q // to stay active until the user quits explicitly with Cmd + Q
if (process.platform !== 'darwin') app.quit(); if (process.platform !== 'darwin') app.quit();
}); });
app.on('activate', function () { app.on('activate', function () {
// On macOS it's common to re-create a window in the app when the // On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open. // dock icon is clicked and there are no other windows open.
if (mainWindow === null) createWindow(); if (mainWindow === null) createWindow();
}); });
// In this file you can include the rest of your app's specific main process // In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here. // code. You can also put them in separate files and require them here.