通过发送消息的方式进行传递,这样即使是内部嵌入的跨域 iframe 页面也可以发送消息到父页面实现。
首先,在页面中绑定元素点击事件。
// 点击全屏
document.getElementById("fullscreen-button").addEventListener("click", function () {
if (document.fullscreenElement) {
document.exitFullscreen();
} else {
if(inElectron) {
// electron 中
const message = JSON.stringify({
action: 'fullscreen'
});
window.parent.postMessage(message, '*');
} else {
// 浏览器中
document.body.requestFullscreen()
}
}
})在electron的 preload.js 中接收 message 消息
const { ipcRenderer } = require('electron')
window.addEventListener('message', function (e) {
// 获取消息内容 data
const { data } = e;
console.log("[electron preload]", data)
try {
let message = JSON.parse(data);
console.log(message)
switch (message.action) {
case 'fullscreen':
ipcRenderer.send('toggle-fullscreen')
break
}
} catch (err) {
console.log("err", err)
}
})修改 electron 的 main.js
// 👇👇👇记得引入 ipcMain
const { app, BrowserWindow, ipcMain, Menu, globalShortcut } = require('electron')
const { platform } = require('node:process')
const path = require('path')
console.log(`This platform is ${platform}`);
const createWindow = () => {
// 创建窗口
const mainWindow = new BrowserWindow({
width: 1080,
minWidth: 760,
height: 720,
minHeight: 480,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
},
})
// 加载 HTML
mainWindow.loadFile('html/index.html')
// 隐藏菜单栏
// let menu = Menu.getApplicationMenu()
Menu.setApplicationMenu(null)
// 👇👇👇核心代码
// 全屏逻辑
// mainWindow.fullScreen = true;
ipcMain.on('toggle-fullscreen', () => {
mainWindow.setFullScreen(!mainWindow.isFullScreen())
})
// 配置ESC键退出全屏
globalShortcut.register('ESC', () => {
mainWindow.setFullScreen(false);
})
// 调试窗口
// mainWindow.webContents.openDevTools()
}
app.whenReady().then(() => {
createWindow()
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit()
})本文由张小弟之家原创。
本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work
尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。
GitHub登录