При перезагрузке страницы «window.print ()» не загружает диалоговое окно печати в Google Chrome 77.0.3865.120. Это происходит, когда IFRAME используется с PDF в качестве SRC - PullRequest
2 голосов
/ 11 октября 2019

Описание проблемы

С помощью JavaScript вы можете программно запустить диалоговое окно печати, используя window.print(). Однако, как только на страницу загружается iframe с PDF в качестве src и вы обновляете страницу, диалоговое окно печати больше не будет отображаться при нажатии на кнопку, которая должна выполнитьфункция window.print().

Проблема не возникает ни в MS Edge, ни в Firefox ... Похоже, что затрагивается только последняя версия Google Chrome (77.0.3865.120) . Это ошибка Chrome?

Действия по воспроизведению ошибки

  1. Перетащите приведенный ниже код в HTML-файл и поместите его на веб-сервер (например, WampServer)
  2. Перейдите в Chrome к index.html
  3. Нажмите [Открыть диалоговое окно печати] ==> ОК
  4. Нажмите [Создать iframe] ==> ОК
  5. Обновить index.html
  6. Нажмите [Открыть диалоговое окно печати] ==> Не в порядке! Не открывается диалоговое окно печати. ​​
  7. . Единственное решение - закрыть текущую вкладку Chrome и открыть index.html
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Test Chrome bug with window.print()</title>
        <script>
            function createMyIframe() {

                // Create new element    
                var myIframe = document.createElement('iframe');

                // Add src attribute
                myIframe.src = 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf';

                // Suggestion of Amy does not solve the issue:
                // Adding a **sandbox** attribute with a space-separated list of pre-defined values that will REMOVE the particular restrictions.
                // Source: https://www.w3schools.com/tags/att_iframe_sandbox.asp
                // Adding the following line is no solution. The iframe that is used in this example, will simply no longer open. Both the <head> and <body> tags of the iframe will be empty.
                // myIframe.sandbox = 'allow-forms allow-modals allow-orientation-lock allow-pointer-lock allow-popups allow-popups-to-escape-sandbox   allow-presentation allow-same-origin allow-scripts allow-top-navigation allow-top-navigation-by-user-activation';

                // Add the iframe to the page
                document.body.appendChild(myIframe);
            }
        </script>
    </head>

    <body>
        <h1>Chrome version 77.0.3865.120 (Official build) (64-bits)</h1>
        <h2>Bug with JavaScript "window.print()"</h2>

        <hr>

        <button onclick="window.print();">Open print dialog</button>
        <button onclick="createMyIframe()">Create Iframe</button>
    </body>
</html>

Заключение

Диалог window.print() становитсябесполезно, как только у вас на странице будет iframe с атрибутом PDF в качестве атрибута src.

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