Come consentire i popup nelle visualizzazioni Web create dinamicamente in Electron.js

Come consentire i popup nelle visualizzazioni Web create dinamicamente in Electron.js


Il mio progetto della barra dei menu smol utilizza lo speciale tag webview di Electron per generare dinamicamente un elenco di finestre del browser secondario per la chat. Negli ultimi due mesi ho avuto un problema con i popup SSO, ovvero che semplicemente non funzionano affatto, presumibilmente perché Electron blocca i popup per impostazione predefinita.

La visualizzazione web di Electron ha un tagallowpopups che lo consente se si effettua la visualizzazione web in modo statico, ma se la si aggiunge dinamicamente non funziona.

const webview = document.createElement('webview');
webview.id = provider.webviewId;
webview.src = provider.url;
webview.setAttribute('allowpopups', 'true'); 

Ce l’ho anche qui:

import { ProviderInterface } from 'lib/types';

export default function Pane({ provider }: { provider: ProviderInterface }) {
	return (
		<div key={provider.paneId()} className="page darwin">
			<webview
				
				allowpopups="true"
				id={provider.webviewId}
				src={provider.url}
				useragent={
					provider.getUserAgent() ? provider.getUserAgent() : undefined
				}
			/>
		div>
	);
}

ma produce a TypeError: this._windowOpenHandler is not a function errore.

immagine

l’uso ingenuo di setWindowOpenHandler non sembra funzionare.

Dopo circa mezz’ora di ricerca ho trovato questa risposta StackOverflow. Commentando qui affinché altri possano trovarlo.

La soluzione è che devi impostarlo all’interno del tuo processo principale:

	app.on('web-contents-created', (e, wc) => {
		
		wc.setWindowOpenHandler((handler) => {
				return {action : "allow"}; 
		});
	});

PR qui: https://github.com/smol-ai/menubar/pull/116/commits/89585ee94f27760e220efee5dc03e5480b8ca078



Source link

Postagens Similares

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *