Ich habe viele Lösungen ausprobiert, aber die einzige, die ich mit, dass auch mit ublock Herkunft gearbeitet kommen konnte, war durch einen Timeout Verwendung des geschlossenen Zustand des Popup zu überprüfen.
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)
}
Offensichtlich ist dies ein Hack; wie alle Lösungen für dieses Problem.
Sie müssen genügend Zeit in Ihrem setTimeout angeben, um das erstmalige Öffnen und Schließen zu berücksichtigen. Es wird also nie ganz genau sein. Es wird eine Position von Versuch und Irrtum sein.
Fügen Sie diese auf Ihrer Liste der Versuche.
Es funktioniert nicht mit Chrome ;-(besser verwenden Sie die Kevin B Lösung unten .. – sly63
Hier ist eine Antwort für Chrome: [erkennen-blocked-popup-in-chrome] (http://stackoverflow.com/questions/668286/detect-blocked-popup-in-chrome/1089792 # 1089792) – ajwaka
lies das auch: https://Stackoverflow.com/a/20235765/2892117 –