我想在我的主BrowserWindow
中嵌入一个BrowserView
,可以在BrowserWindow
的范围内拖动。然而,当我使用css -webkit-app-region: drag
时,拖动BrowserView
实际上会移动整个BrowserWindow
。我如何才能实现我的目标?
下面是一个复制设置:
src/main.js:
import * as path from 'path';
import { app, BrowserView, BrowserWindow } from 'electron';
const baseDir = app.getAppPath()
app.on("ready", async () => {
const mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: true,
contextIsolation: true,
},
frame: false
});
mainWindow.setMenu(null);
mainWindow.maximize();
mainWindow.on('closed', () => app.quit())
mainWindow.loadFile(path.join(baseDir, "src/main.html"));
const view = new BrowserView({
webPreferences: {
sandbox: false,
nodeIntegration: false,
contextIsolation: true,
},
})
view.webContents.loadFile(path.join(baseDir, 'src/window.html'));
view.setBounds({
x: 200,
y: 200,
width: 1000,
height: 500,
})
mainWindow.addBrowserView(view);
});
字符串
网址:http://www.china.com
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<link rel="stylesheet" href="style.css">
</head>
<body style="background-color: #666;"></body>
</html>
型
src/window.html:
<!DOCTYPE html>
<html>
<head>
<title>Embeded</title>
<link rel="stylesheet" href="style.css">
</head>
<body class="dragWindow" style="background-color: #888;"></body>
</html>
型
src/style.css:
html {
height: 100%;
width: 100%;
box-sizing: border-box;
-webkit-app-region: no-drag;
}
body {
height: 100%;
width: 100%;
margin: 0;
}
.dragWindow {
-webkit-app-region: drag;
-webkit-user-select: none;
user-select: none;
}
型
编辑:我尝试使用脚本将拖动事件从BrowserView
传递到main process
,并将BrowserView
从main process
移动,但结果是,在工作时,超级慢,我认为是由于进程之间的通信滞后。当移动鼠标太快时,它只是退出BrowserView
和拖动停止,而停留在“拖动”状态。我会更喜欢如果一个电子本机解决方案存在。
2条答案
按热度按时间ltskdhd11#
我想你可能会在本期中找到一些很酷的信息:https://github.com/electron/electron/issues/32751#issuecomment-1030484112
他们谈到了电子公开的私有API,你可能会找到解决方案。
此外,该问题的作者正试图找到一个类似的解决方案,以便对
BrowserView
中的事件/输入做出React。b1zrtrql2#
尝试:
字符串