electron监听新窗口创建时的事件

主要使用两个API

1. win.webContents.setWindowOpenHandler()

2. win.webContents.on('did-create-window',()=>{}

具体使用见下面的事例,注意在要主进程中使用,还要在app.whenReady()后使用,因为这是一个窗口 webContents的事件

setWindowOpenHandler可以理解为在创建新窗口前设置新窗口的属性,其实和手动创建一个BrowserWindow具有相同的内容

'did-create-window':就是监听新窗口创建完毕时的事件。如果上一步setWindowOpenHandler有拦截(action: "deny"),则无法监听到此事件。返回的两个属性,一个时窗体,一个是窗体的创建属性,利用返回的win窗体属性,我们就可以像操作其他窗口一样的使用了,比如取消原生菜单等等

app.whenReady().then(() => {
	createWindow()
	require('./ipcmMain/index.js')
	require('./ipcmMain/tray.js')
	// 创建窗口时监听  deny:阻止创建 allow:允许创建
	win.webContents.setWindowOpenHandler(data => {
		return {
			action: "allow",
			overrideBrowserWindowOptions: {
				width: 1176,
				height: 644,
				// kiosk: true,
				autoHideMenuBar: true, //设置新窗口自动隐藏菜单栏
				// simpleFullScreen: true,   //没有效果
				// menuBarVisible: false,  //没有效果
				webPreferences: {
					contextIsolation: false,
					nodeIntegration: true
				}
			}
		};
	})
	// 监听新的窗口创建后
	win.webContents.on('did-create-window', (win, {
		url,
		frameName,
		options,
		disposition,
		additionalFeatures,
		referrer,
		postData
	}) => {
		// 这里win参数就是获取的新窗口,可以直接用removeMenu()隐藏菜单了
		win.removeMenu()
		console.log('url:', url)
		console.log('frameName:', win.id)
		console.log('options:', options)
		console.log('disposition:', disposition)
		console.log('additionalFeatures:', additionalFeatures)
		console.log('referrer:', referrer)
		console.log('postData:', postData)
	});
})

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注