Не могу установить body.innerHTML нового окна about: blank в Firefox (window.open ()) - PullRequest
0 голосов
/ 16 мая 2018

Это тема в стиле Q & A, потому что я не смог найти кого-то с этой проблемой / с решением.

Случай:

У вас есть JavaScript, в котором вы открываете новое окно с помощью window.open (' about: blank ', ...) и хотите установить его содержимое, установив myWindowReference.document.body.innerHTML = SOMETHING.

Проблема:

Прекрасно работает в Chrome, Edge, IE, Opera, но не в нескольких (возможно, всех?) Версиях Firefox .Страница остается белой, но сообщение журнала console.dir(myWindowReference.document.body.innerHTML); является правильным.

Пример кода:

<!doctype html>
<html>
    <head>
        <script>
        window.onload = () => {
            let wind = window.open('about:blank', 'someName', 'resizable,scrollbars');
            wind.document.body.innerHTML = "HALLO, das ist ein TEST";
            wind.document.title = "TEST";
            wind.focus();
            console.log("wind.document.body.innerHTML:");
            // OUTPUT IS CORRECT
           // but page is blank
            console.dir(wind.document.body.innerHTML);
        }
        </script>
    </head>
    <body></body>
</html>

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Решение 2 (Лучшее решение) :

Обнаружено, что нет необходимости использовать "about: blank" в window.open () для пустой страницы.Поскольку about: blank - это специальная страница в Firefox, это может быть причиной ошибки.Просто оставьте это пустым, и это работает.

<!doctype html>
<html>
    <head>
        <script>
        window.onload = () => {
            let wind = window.open('', 'someName', 'resizable,scrollbars');
            wind.document.body.innerHTML = "HALLO, das ist ein TEST";
            wind.document.title = "TEST";
            wind.focus();
        }
        </script>
    </head>
    <body></body>
</html>
0 голосов
/ 16 мая 2018

Решение

Я предполагаю, что Firefox не ожидает внутри себя, пока ссылка на окно полностью не появится, и поэтому не обновляет графический интерфейс, а обновляет его каким-то образом внутри, так что console.dir(wind.document.body.innerHTML); в любом случае имеет правильный вывод.Я обнаружил, что решение использует тайм-аут, так что у Firefox достаточно времени, чтобы полностью создать ссылку на окно внутри.

<!doctype html>
<html>
    <head>
        <script>
        window.onload = () => {
            let wind = window.open('about:blank', 'someName', 'resizable,scrollbars');
            // [B] DOES WORK
            window.setTimeout(() => {
                wind.document.body.innerHTML = "HALLO, das ist ein TEST";
                wind.document.title = "TEST";
            }, 1)  // USING A TIMEOUT IS THE SOLUTION

            /* [A] DOESN't WORK
            wind.document.body.innerHTML = "HALLO, das ist ein TEST";
            wind.document.title = "TEST";
            */

            wind.focus();
            console.log("wind.document.body.innerHTML:");
            console.dir(wind.document.body.innerHTML);
            /*
            This log message is in either way ([A] and [B]) correct in Firefox.
            With [A] there is no content and no title set to the window, althrough it is visible.
            With [B] it works. Seems like Firefox is internally not waiting for the right reference/
            until the window is opened.
            */
        }
        </script>
    </head>
    <body></body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...