Предотвращение открытия заблокированного всплывающего окна Firefox - PullRequest
0 голосов
/ 26 марта 2019

Для веб-приложения у меня есть возможность открыть всплывающее окно (w = window.open), чтобы включить мультиэкран для конечного пользователя.

Когда всплывающее окно открывается с помощью js без ввода пользователя (загрузка предыдущей пользовательской конфигурации), Firefoxзаблокируйте его, как и ожидалось.

Я могу обнаружить его с помощью w == null и обработать его, чтобы иметь функциональное приложение без всплывающего окна, если пользователь не хочет их.

Однако, если пользовательнажмите «Разрешить этому сайту открывать всплывающие окна», затем Firefox откроет всплывающее окно с текущей страницей.

Существует ли возможность запретить Firefox открывать заблокированные всплывающие окна?

Редактировать: MWE

<html>
<body> 
<script type="text/javascript">
    function bug () {
        let w = window.open('', '', 'width=800, height=600');
        if (w == null) {
            console.log("blocked");
            return;
        }
        let p = w.document.createElement('div');
        p.className += "layout";
        let c = w.document.createElement('div');
        c.className += "content";
        c.style.height = '100%';
        c.innerHTML = "Hello world !";
        w.document.body.appendChild(p);
        p.appendChild(c);
    }

    document.body.innerHTML = "Hello fellow human beings";
    bug();
</script>
</body>
</html>

Edit2: Мое сочетание текущей страницы и всплывающего окна было на моей стороне, основная проблема все еще сохраняется.

Спасибо

1 Ответ

1 голос
/ 26 марта 2019

Если пользователь решит открыть всплывающее окно с заблокированной всплывающей панели инструментов после того, как оно будет заблокировано, он загрузит URL-адрес, указанный вами для window.open. Вы не дали ни одного, поэтому по умолчанию это будет та же страница.

Во-первых, обычное решение состоит в том, чтобы всплывающее окно загружало другую страницу, а не позволяло ему загружать ту же страницу, а затем пыталось изменить его DOM. Затем, открыв заблокированное всплывающее окно, факт загрузит правильную страницу с другим содержимым.

Второе решение для более точного выполнения запроса - установить всплывающий URL-адрес для страницы, которая сразу же закроется. В хорошем случае, если вы не заблокированы, вы можете остановить загрузку этой страницы, прежде чем она загрузится, чтобы закрыть себя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...