J'ai essayé de nombreuses solutions, mais la seule que j'ai trouvée et qui fonctionnait également avec uBlock Origin, était d'utiliser un délai d'attente pour vérifier l'état de fermeture de la fenêtre pop-up.
function popup (url, width, height) {
const left = (window.screen.width / 2) - (width / 2)
const top = (window.screen.height / 2) - (height / 2)
let opener = window.open(url, '', `menubar=no, toolbar=no, status=no, resizable=yes, scrollbars=yes, width=${width},height=${height},top=${top},left=${left}`)
window.setTimeout(() => {
if (!opener || opener.closed || typeof opener.closed === 'undefined') {
console.log('Not allowed...') // Do something here.
}
}, 1000)
}
Il s'agit évidemment d'un hack, comme toutes les solutions à ce problème.
Vous devez prévoir suffisamment de temps dans votre setTimeout pour tenir compte de l'ouverture et de la fermeture initiales, de sorte qu'il n'y aura jamais de précision absolue. Il s'agira d'une position d'essai et d'erreur.
Ajoutez ceci à votre liste de tentatives.