Пытаюсь понять, как эффективно загрузить файл proload. js в электрон:
Версия «электрон»: «^ 9.1.2», версия «электрон-строитель»: «^ 22.8.0 ",
В фоновом режиме. js Я поставил
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
//preload: path.join(app.getAppPath(), "preload.js"),
preload: path.join(__dirname, "./preload.js"),
},
предварительную загрузку. js и фон. js находятся в одной папке: sr c folder .
это моя предварительная загрузка. js:
const {
contextBridge,
ipcRenderer
} = require("electron");
const path = require("path");
contextBridge.exposeInMainWorld(
"api", {
send: (channel, data) => {
// whitelist channels
let validChannels = ["toMain"];
if (validChannels.includes(channel)) {
ipcRenderer.send(channel, data);
}
},
receive: (channel, func) => {
let validChannels = ["fromMain"];
if (validChannels.includes(channel)) {
// Deliberately strip event as it includes `sender`
ipcRenderer.on(channel, (event, ...args) => func(...args));
}
}
}
);
webpack.config. js:
import 'script-loader!./script.js';
import webpack from 'webpack';
const path = require('path');
module.exports = {
target: ['electron-renderer', 'electron-main', 'electron-preload'],
pluginOptions: {
electronBuilder: {
chainWebpackMainProcess: config => {
config.resolve.alias.set('jsbi', path.join(__dirname, 'node_modules/jsbi/dist/jsbi-
cjs.js'));
}
},
},
};
module.exports = {
entry: './src/background.js',
target: 'node',
output: {
path: path.join(__dirname, 'build'),
filename: 'backend.js'
}
}
module.exports = config => {
config.target = "electron-renderer";
return config;
};
Я получаю следующие сообщения об ошибках:
Загрузка скрипта предварительной загрузки в Electron и Vue
Я добавил эти строки в предварительную загрузку. js, но это не сработало:
window.onload = () => {
const { dialog } = require("electron").remote;
window.electron = {};
window.electron.dialog = dialog; // now set properly
};
Я попытался выполнить решение той же проблемы, но с помощью React вместо Vue. js, но мне это не удалось: https://github.com/electron/electron/issues/9920#issuecomment -336757899
Обновление 1)
Я поместил предварительную загрузку. js в папку dist_electron:
(base) marco@pc01:~/webMatters/electronMatters/ggc-new/dist_electron$
ls -lah
total 1,5M
drwxr-xr-x 2 marco marco 4,0K ago 6 09:11 .
drwxr-xr-x 9 marco marco 4,0K ago 6 09:11 ..
-rw-r--r-- 1 marco marco 1,5M ago 5 23:25 index.js
-rw-r--r-- 1 marco marco 3,0K ago 5 23:22 package.json
-rw-r--r-- 1 marco marco 54 ago 5 22:06 preload.js
В background.ts я изменил путь до предварительной загрузки. js:
declare const __dirname: string
win = new BrowserWindow({
webPreferences: {
nodeIntegration: false,
preload: path.join(__dirname, "../dist_electron/preload.js"),
}
}
Я добавил следующие строки в webpack.config. js:
const CopyPlugin = require('copy-webpack-plugin');
module.exports = {
plugins: [
new CopyPlugin({
patterns: [
{ from: 'source', to: 'dest' },
{ from: 'other', to: 'public' },
],
options: {
concurrency: 100,
},
}),
],
};
Выполнение пряжи электрон: служить Я получаю эту ошибку:
And it seems that what I've done corresponds to what is suggested to do here: Как использовать предварительную нагрузку. js правильно в Electron
Итак ... что я отсутствует? Как решить проблему?
Обновление 2)
Как предлагается здесь: https://github.com/electron/electron/issues/9920#issuecomment -575839738 и здесь https://github.com/reZach/secure-electron-template/blob/master/docs/secureapps.md, чтобы сохранить app safer nodeIntegration нужно оставить false, так как это уже по умолчанию. И «Я хотел бы сделать приложение более безопасным.
Но в любом случае я попытался также поставить nodeIntegration: true:
webPreferences: {nodeIntegration: true, preload: path.join (__ dirname," ../dist_electron/preload.js "),}
И вот результат:
введите описание изображения здесь
Марко