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.
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
