import * as electron from "electron"; import * as fs from "fs"; import * as path from "path"; import * as winmgr from "../window"; export async function open_preview(url: string) { console.log("Open URL as preview: %s", url); const window = new electron.BrowserWindow({ webPreferences: { webSecurity: true, nodeIntegration: false, nodeIntegrationInWorker: false, allowRunningInsecureContent: false, }, skipTaskbar: true, center: true, }); await winmgr.apply_bounds('url-preview', window); winmgr.track_bounds('url-preview', window); window.setMenu(null); window.loadURL(url).then(() => { window.webContents.openDevTools(); }); //FIXME try catch? const inject_file = path.join(path.dirname(module.filename), "inject.js"); const code_inject = fs.readFileSync(inject_file).toString(); window.webContents.once('dom-ready', e => { const code_inject = fs.readFileSync(inject_file).toString(); window.webContents.executeJavaScript(code_inject, true); }); } electron.ipcMain.on('preview-action', (event, args) => { const sender: electron.WebContents = event.sender; if(!args || !args.action) { console.warn("Received preview action without a valid action type!"); return; } if(args.action === "open-url") { console.log("Opening " +args.url); electron.shell.openExternal(args.url, { activate: true }); const browser = electron.BrowserWindow.fromWebContents(sender); if(!browser) console.warn("Failed to find browser handle"); else browser.close(); } });