Mi problema es difícil de explicar, pero lo intentaré: tengo un error de electrones. Not allowed to load local resource
cuando intento reproducir un archivo mp3
desde el directorio de la aplicación.
Eso sucede porque estoy usando Webpack para desarrollo y servidor Express para producción para ejecutar mis aplicaciones (Express se usa debido a algunas funciones de enrutamiento angular).
Esto es parte de mi electron-main.js
-
function createWindow() { win = new BrowserWindow({ width: 1500, height: 900, resizable: true, center: true, autoHideMenuBar: true, icon: path.join(__dirname, 'static', 'note.ico') }); if (DEBUG) { // Loading from Webpack win.loadURL(`http://localhost:4200`); win.webContents.openDevTools(); } else { // Loading from Express-server const server = require("../server"); win.loadURL(`http://localhost:3333`); }
servidor.js
let path = require('path'); let express = require('express'); let app = express(); app.use(express.static(path.join(__dirname, 'dist'))); app.get('/', function (req, res) { res.sendFile(path.join(__dirname, 'dist', 'index.html')); }); app.listen(3333);
Pero cuando traté de establecer
win.loadURL(url.format({ pathname: path.join(__dirname, 'index.html'), protocol: 'file:', slashes: true }));
Tengo mi reproducción de mp3
.
Entonces entiendo que solo se puede acceder a los archivos locales cuando protocol: 'file:'
, no http:
la estructura de la aplicación debe ser similar -
(root folder) --app.exe (whatever) --mp3 --1.mp3 --2.mp3 --3.mp3 ...
¿Hay una solución? ¿Tal vez pueda usar Express para obtener mis archivos?
La única solución que he encontrado es crear una ventana oculta adicional usando file:
protocolo como este
hiddenWindow = new BrowserWindow({ show: false }); hiddenWindow.loadURL(url.format({ pathname: path.join(__dirname, 'hidden.html'), protocol: 'file:', slashes: true }));
e inicie sus funciones usando ipcRenderer
e ipcMain
.