- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的标题可能没有正确表达我的问题,但我找不到简洁的方法来表达问题。
问题是这样的:
我有一个由 IPC 事件触发的 BrowserWindow。当 BroswerWindow 打开时,它会向主进程发送一条消息,表示它已完成加载,然后主进程会向其发送一些数据来执行特定任务。任务完成后,用户关闭窗口并开始执行不同的进程。
这一切都工作正常,除了应用程序收到该事件以再次打开 BrowserWindow 时,将数据发送到新窗口的事件处理程序会抛出一个错误,表明它无法将数据发送到窗口,因为该过程已被销毁或重新打开窗口,但使用第一次打开窗口时的所有旧数据,而我需要的是窗口的新实例。我知道我可以简单地使用 javascript 来拆除并重新生成原始 HTML,但我觉得必须有更好的方法。下面是代码:
main.js
const electron = require ("electron");
const ipcMain = require('electron').ipcMain;
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
function openNewWindow() {
let win = new BrowserWindow({ autoHideMenuBar: true });
win.loadURL(__dirname + '\\new_window.html');
win.webContents.openDevTools()
win.on('closed', function () {
win = null;
})
return win
};
let mainWindow;
app.on('window-all-closed', function () {
if (process.platform != 'darwin') {
app.quit ();
}
});
app.on('ready', function () {
mainWindow = new BrowserWindow ({
title: app.getName() + " - v" + app.getVersion(),
autoHideMenuBar: true
});
mainWindow.loadURL ('file://' + __dirname + '/index.html');
//This event handler opens the new window when it receives the open-new-window event
ipcMain.on('open-new-window', (event,arg) => {
console.log('Arg = ' + arg);
let newWindow = openNewWindow();
//This event handler sends data to the new window when the new window indicates that it is done loading
ipcMain.on('done-loading',(event2,arg2) => {
console.log(arg2);
newWindow.webContents.send('test',arg);
});
});
// Close the application when the window is closed
mainWindow.on ('closed', function() {
mainWindow = null;
});
});
错误消息中对第 52 行的引用是此行:
newWindow.webContents.send('test',arg);
新窗口打开,但没有数据发送到其中。
最佳答案
该问题与 this 问题类似。
每个 open-new-window
事件都会导致您重新订阅 ipcMain
到新窗口的 done-loading
事件,但它仍然维护对旧窗口的订阅/关闭。
您不想在新窗口处理程序内执行 ipcMain.on("done-loading", ...)
操作。
您想在窗口处理程序之外执行此操作,而是使用事件参数将响应发送回相同的 webcontents:
ipcMain.on('open-new-window', (event, arg) => {
openNewWindow();
});
ipcMain.on('done-loading', (event, arg) => {
event.sender.send('test', arg);
});
<小时/>
但是,有一个 did-finish-load
事件可以完成您似乎想做的事情:
function openNewWindow() {
let win = new BrowserWindow({ autoHideMenuBar: true });
win.loadURL(__dirname + '\\new_window.html');
win.webContents.once("did-finish-load", () => {
win.webContents.send("test", ...);
});
};
关于javascript - 当关闭 Electron 中的 BrowserWindow 时,事件监听器继续引用 BrowserWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59106580/
以下代码有效: import { app, BrowserWindow } from 'electron'; class Main { static mainWindow: Electron.
代码引用 : https://github.com/aredfox/screencapturer 问题描述 : Here是 electron带有“MainWindow”的应用程序,其中包含一个“开始捕
我的标题可能没有正确表达我的问题,但我找不到简洁的方法来表达问题。 问题是这样的: 我有一个由 IPC 事件触发的 BrowserWindow。当 BroswerWindow 打开时,它会向主进程发送
我调用 dialog.showOpenDialog() 来查找文件夹的路径。但问题是这不会阻塞 mainWindow。当标准路径选择 GUI 出现时,程序必须在路径选择完成后才能继续工作。谷歌搜索并意
在 electron.service.ts 的文件夹 providers 中,我有代码: import { Injectable } from '@angular/core'; // If you i
我第一次在我的 MacBook 上试用 Electron,因为我想要一个可以在其中编写桌面应用程序的环境。在退休之前我是一名程序员,使用过各种语言,但没有太多 javascript。 我正在浏览在线教
我的应用程序是全屏游戏的叠加层(alwaysOnTop),当用户单击我的叠加层时,它会获得焦点并在他们的游戏顶部显示任务栏。集中注意力很好,但我不能显示任务栏。 它在 BrowserWindow do
如果我的 Electron 应用程序打开和关闭了许多BrowserWindow,那么每个应用程序是否都具有唯一的ID? 因此,在我的应用一次运行中,如果我打开一个BrowserWindow并关闭它,然
我希望我的主窗口是屏幕的100%,而不是全屏,并且不能调整大小。 const electron = require('electron'); const url = require('url'); c
刚刚开始使用 Electron,我希望能够使用 loadURL 加载页面,但不替换整个页面。 这里的想法是如何使用像部分/模板这样的东西,这样我就可以在顶部和底部拥有一致的布局,但将不断变化的内容引入
请问有没有动态设置位置或将浏览器窗口移动到右下角的方法? BrowserWindow.setPosition(x, y) 最佳答案 您可以使用 the screen API ,并使用 fixed wi
有没有办法在 electron 中关闭 BrowserWindow 时返回值? 充其量我希望有一种方法可以从关闭事件中获取变量: win.on('closed', function(variables
当我创建一个新的 BrowserWindow 并使用 loadURL 在渲染器中使用一个 html 文件时,我猜在加载 css 之前我可以看到一闪而过的无样式内容半秒钟。 window.loadURL
我正在创建多个 UI 测试,而不是打开 Microsoft.VisualStudio.TestTools.UITesting.BrowserWindow 的新实例,我想检查 BrowserWindow
问题 是否有可能在 Electron 中制作一个BrowserWindow,透明和模糊?因为它模糊了所有背景内容,包括应用程序和墙纸。 如果可能的话,我将如何做到这一点? 例子 这是我试过的一些代码。
const BrowserWindow = require('electron') const win = new BrowserWindow({ width: 800, height: 600 })
我正在使用 BrowserWindow.loadURL("http://google.com") 在 ElectronJS 中加载页面。稍后在我的应用程序中,我需要通过一些哈希值(例如 http://
我对 Electron 、nodejs 和 javascript 很陌生,但我一直在稳步学习,取得了不错的结果,但我在这里遇到了一些障碍,并且没有找到类似的问题。然而,我确实找到了一个有人以相同方式使
我想从渲染进程中创建一个“Worker”BrowserWindow。工作进程将进行一些长时间运行的计算并定期返返回告。 看起来我可以使用 remote 模块在渲染器进程中执行此操作,而不是直接在主进程
我想知道BrowserWindow位于两个或多个屏幕上。 我猜 Electron API 没有给出方法。我怎样才能做到这一点?有什么办法吗?? 最佳答案 没有直接的方法可以实现这一点。但是以下绝对可以
我是一名优秀的程序员,十分优秀!