Я пробовал много решений, но единственное, что я мог придумать, которое также работало с uBlock Origin, заключалось в использовании тайм-аута для проверки закрытого статуса всплывающего окна.
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)
}
Очевидно, что это взломать; как и все решения этой проблемы.
Вам необходимо предоставить достаточно времени в вашем setTimeout для учета начального открытия и закрытия, поэтому он никогда не будет полностью точным. Это будет пример проб и ошибок.
Добавьте это в свой список попыток.
Он не работает с Chrome ;-(лучше использовать решение Kevin B ниже. – sly63 2013-03-05 10:57:37
Вот ответ для хрома: [обнаружение-заблокировано-всплывающее окно] (http://stackoverflow.com/questions/668286/detect-blocked-popup-in-chrome/1089792 # 1089792) – ajwaka 2014-02-18 14:08:48
также читайте это: https://stackoverflow.com/a/20235765/2892117 – 2017-07-15 11:21:30