は、子ウィンドウを開くには2通りの方法があります。これは、たとえば、メニュー内のカスタムウィンドウに便利です。
ここでコンストラクタを使用して、parent
の子にすることができます。 modal
属性がtrueの場合、親ウィンドウは子ウィンドウが閉じられるまでアクセスできません。
function createChild(parent, html) {
//creates modal window
child = new BrowserWindow({
width: 786,
height: 847,
parent: parent,
modal: true,
show: false
});
child.loadURL(html);
child.webContents.openDevTools();
child.once("ready-to-show",() => {
child.show();
});
}
2.レンダリングプロセス今
から、私たちは常に正しい、ちょうど子ウィンドウを開くには、メイン処理にIPCの上にイベントを送信したくないですか?
私たちはそうする必要はありません。そのために窓にopen
関数を使用することができます。例えば
:これにより
parent.webContents.on(
"new-window",
(event, url, frameName, disposition, options, additionalFeatures) => {
Object.assign(options, {
parent: parent,
modal: true
});
}
);
、window.open()
が呼び出されます。
const button = document.querySelector('button')
button.addEventListener('click', e => {
self.open(`file://${__dirname}/child.html`)
})
このウィンドウをあなたの親やモーダルの子を作成するには、親ウィンドウ上のEventListenerを登録することができます親ウィンドウでは、モーダル子ウィンドウが開きます。
例
main.js
const { app, BrowserWindow } = require("electron");
let win;
function createWindow() {
win = new BrowserWindow({ width: 1000, height: 800 });
win.loadURL(`file://${__dirname}/index.html`);
win.webContents.openDevTools();
win.on("closed",() => {
win = null;
});
win.webContents.on(
"new-window",
(event, url, frameName, disposition, options, additionalFeatures) => {
Object.assign(options, {
parent: win,
modal: true
});
}
);
}
app.on("ready", createWindow);
index.htmlを
<!DOCTYPE html>
<html>
<body>
<p>I am the parent, you can't touch me until you closed my child!</p>
<button>Open child!</button>
<script>
const button = document.querySelector('button')
button.addEventListener('click', e => {
self.open(`file://${__dirname}/child.html`)
})
</script>
</body>
</html>
のchild.html
<!DOCTYPE html>
<html>
<body>
I'm the child!
</body>
</html>
は、子ウィンドウモーダルウィンドウを作ります。 [window.open()](https://electronjs.org/docs/api/window-open)の例これにより、子ウィンドウが閉じられるまで親ウィンドウが無効になります。 – Rhayene