Описание проблемы
С помощью JavaScript вы можете программно запустить диалоговое окно печати, используя window.print()
. Однако, как только на страницу загружается iframe
с PDF в качестве src
и вы обновляете страницу, диалоговое окно печати больше не будет отображаться при нажатии на кнопку, которая должна выполнитьфункция window.print()
.
Проблема не возникает ни в MS Edge, ни в Firefox ... Похоже, что затрагивается только последняя версия Google Chrome (77.0.3865.120) . Это ошибка Chrome?
Действия по воспроизведению ошибки
- Перетащите приведенный ниже код в HTML-файл и поместите его на веб-сервер (например, WampServer)
- Перейдите в Chrome к index.html
- Нажмите [Открыть диалоговое окно печати] ==> ОК
- Нажмите [Создать iframe] ==> ОК
- Обновить index.html
- Нажмите [Открыть диалоговое окно печати] ==> Не в порядке! Не открывается диалоговое окно печати.
- . Единственное решение - закрыть текущую вкладку 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
.