diff --git a/package.json b/package.json index a2cc9490..04ce07c9 100644 --- a/package.json +++ b/package.json @@ -184,6 +184,10 @@ { "from": "dist-electron/www", "to": "www" + }, + { + "from": "dist-electron/resources/preload.js", + "to": "preload.js" } ], "linux": { diff --git a/scripts/build-electron.js b/scripts/build-electron.js index f9d8fed6..dc754846 100644 --- a/scripts/build-electron.js +++ b/scripts/build-electron.js @@ -47,4 +47,21 @@ indexContent = indexContent.replace( // Write the modified index.html to dist-electron/www fs.writeFileSync(finalIndexPath, indexContent); +// Copy preload script to resources +const preloadSrc = path.join(electronDistPath, "preload.js"); +const preloadDest = path.join(electronDistPath, "resources", "preload.js"); + +// Ensure resources directory exists +const resourcesDir = path.join(electronDistPath, "resources"); +if (!fs.existsSync(resourcesDir)) { + fs.mkdirSync(resourcesDir, { recursive: true }); +} + +if (fs.existsSync(preloadSrc)) { + fs.copyFileSync(preloadSrc, preloadDest); + console.log("Preload script copied to resources directory"); +} else { + console.error("Preload script not found at:", preloadSrc); +} + console.log("Electron index.html copied and patched for Electron context."); diff --git a/src/electron/main.ts b/src/electron/main.ts index 6a893f0d..e29f5685 100644 --- a/src/electron/main.ts +++ b/src/electron/main.ts @@ -20,16 +20,20 @@ const logger = { const isDev = process.argv.includes("--inspect"); function createWindow(): void { - // Add before createWindow function - const preloadPath = path.join(__dirname, "preload.js"); - logger.log("Checking preload path:", preloadPath); - logger.log("Preload exists:", fs.existsSync(preloadPath)); + // Resolve preload path based on environment + const preloadPath = app.isPackaged + ? path.join(process.resourcesPath, "preload.js") + : path.join(__dirname, "preload.js"); + + logger.log("[Electron] Preload path:", preloadPath); + logger.log("[Electron] Preload exists:", fs.existsSync(preloadPath)); // Log environment and paths - logger.log("process.cwd():", process.cwd()); - logger.log("__dirname:", __dirname); - logger.log("app.getAppPath():", app.getAppPath()); - logger.log("app.isPackaged:", app.isPackaged); + logger.log("[Electron] process.cwd():", process.cwd()); + logger.log("[Electron] __dirname:", __dirname); + logger.log("[Electron] app.getAppPath():", app.getAppPath()); + logger.log("[Electron] app.isPackaged:", app.isPackaged); + logger.log("[Electron] process.resourcesPath:", process.resourcesPath); // List files in __dirname and __dirname/www try { @@ -53,7 +57,7 @@ function createWindow(): void { contextIsolation: true, webSecurity: true, allowRunningInsecureContent: false, - preload: path.join(__dirname, "preload.js"), + preload: preloadPath, // Use the resolved preload path }, }); @@ -66,33 +70,36 @@ function createWindow(): void { urls: [ "file://*/*/assets/*", "file://*/assets/*", - "file:///assets/*", // Catch absolute paths - "", // Catch all URLs as a fallback + "file:///assets/*", + "", ], }, (details, callback) => { let url = details.url; + logger.debug("[Electron] Intercepted URL:", url); + + // Get the base directory for assets + const baseDir = app.isPackaged + ? `file://${process.resourcesPath}` + : `file://${__dirname}`; // Handle paths that don't start with file:// if (!url.startsWith("file://") && url.includes("/assets/")) { - url = `file://${path.join(__dirname, "www", url)}`; + url = `${baseDir}/www${url}`; + logger.debug("[Electron] Rewritten non-file URL to:", url); } // Handle absolute paths starting with /assets/ if (url.includes("/assets/") && !url.includes("/www/assets/")) { - const baseDir = url.includes("dist-electron") - ? url.substring( - 0, - url.indexOf("/dist-electron") + "/dist-electron".length, - ) - : `file://${__dirname}`; const assetPath = url.split("/assets/")[1]; const newUrl = `${baseDir}/www/assets/${assetPath}`; + logger.debug("[Electron] Rewritten asset URL to:", newUrl); callback({ redirectURL: newUrl }); return; } - callback({}); // No redirect for other URLs + logger.debug("[Electron] No rewrite needed for URL:", url); + callback({}); }, );