我有一个Electron应用程序,它呈现的HTML文件包含以下内容:
<html>
<head>
<script>
var myfunc = function() {
var data = "Some stuff to display in another window.";
var secondWindow = window.open();
secondWindow.document.write(data);
};
</script>
</head>
<body>
<button onclick="myfunc();">Open Second Window</button>
</body>
</html>
现在这可以在我的普通浏览器(Firefox)中运行,但是当我JSON.stringify(secondWindow);
时我在电子应用程序中得到{'closed': false}
而不是实际的窗口句柄(尽管打开了一个空窗口)。
任何人都可以对这种行为有所了解,也许是通过Electron获得理想结果的方法吗?
电子应用:
const {app, BrowserWindow} = require("electron");
const path = require("path");
const url = require("url");
let win
function createWindow () {
win = new BrowserWindow({width: 800, height: 600})
win.loadURL(url.format({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
}))
win.webContents.openDevTools({"detach": true})
win.on('closed', () => {
win = null
})
}
app.on('ready', createWindow)
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (win === null) {
createWindow()
}
})
答案 0 :(得分:1)
您必须创建BrowserWindow
并调用loadURL
方法
// In the main process.
const {BrowserWindow} = require('electron')
// Or use `remote` from the renderer process.
// const {BrowserWindow} = require('electron').remote
let win = new BrowserWindow({width: 800, height: 600})
win.on('closed', () => {
win = null
})
// Load a remote URL
win.loadURL('https://github.com')
// Or load a local HTML file
win.loadURL(`file://${__dirname}/app/index.html`)
<强>更新强> 请处理主控制器上的click事件:
var remote = require('electron').remote;
$(document).on('click', '#btn', function() {
// Hide current window
var currWindow = remote.getCurrentWindow();
currWindow.hide();
});
处理主窗口隐藏事件以确保主窗口关闭
win.on('hide', function(e) {
showNewWindow();
});
var showNewWindow = function() {
newWindow = new BrowserWindow(windowOption);
newWindow .loadURL(`file://${__dirname}/app/new.html`)
}
答案 1 :(得分:0)
这以不同的方式工作。您的主进程管理的所有浏览器窗口实例,您需要在主进程中创建新的窗口实例并将其设置在当前窗口的顶部,或者您可以在当前主窗口中重新加载URL。如果这种必要性来自渲染器进程中的逻辑,则需要通知主进程(通过ipcRenderer.send)在主进程中对特定浏览器窗口句柄执行某些操作。在您当前的代码中,您只需创建一个浏览器窗口,当您在渲染器进程中调用window.open时,此新实例将与主进程分离并且无法控制。