Диалог Chrome: window.print() открывается только после перезагрузки страницы (javascript)
Я столкнулся с действительно странной проблемой. Я вызываю window.print() из файла javascript. Это отлично работает в Safari, IE, Firefox... и до двух часов назад это работало и в Chrome. (Версия 29.0.1547.57)
Я не изменил ничего существенного в моем файле javascript (на самом деле - я просто удалил некоторые комментарии...), но то, что сейчас происходит, действительно странно: в Chrome диалог печати не открывается, когда window.print() называется. Ничего не произошло. Но затем, когда я нажимаю reload, диалог печати открывается немедленно.
Поведение в другом браузере не изменилось. И во время отладки в Chrome я вижу, что window.print() вызывается как ожидалось, и после этого script продолжается. Только диалог печати не отображается до нажатия перезагрузки.
Кто-нибудь когда-либо испытывал подобное? Я также попытался вызвать window.print() в setTimeout(), но это ничего не изменило. Когда я отлаживаю содержимое страницы, которое должно быть напечатано, выглядит совершенно загруженным.
Прошу прощения, но я ничего не нашел при исследовании. Любая помощь будет оценена!
Спасибо!
Ответы
Ответ 1
Wasiim прав, есть ошибка Chrome, где window.print()
не работает, если в DOM есть тег <video>
. Я решил это, вызвав эту функцию:
function printPage() {
window.print();
//workaround for Chrome bug - https://code.google.com/p/chromium/issues/detail?id=141633
if (window.stop) {
location.reload(); //triggering unload (e.g. reloading the page) makes the print dialog appear
window.stop(); //immediately stop reloading
}
return false;
}
Ответ 2
Из моего опыта это связано с продолжающимся фоновым трафиком, например. ajax-звонки и т.д., которые не позволяют Chrome почувствовать, что эта страница загружена полностью. Перезагрузка прерывает весь трафик, и появляется диалоговое окно печати.
Это особая ошибка в Visual Studio 2013, где BrowserLink постоянно гаснет в фоновом режиме.
Это можно протестировать, отключив BrowserLink с помощью следующей настройки:
<configuration>
<appSettings>
<add key="vs:EnableBrowserLink" value="false"/>
</appSettings>
</configuration>
Ответ 3
У меня точно такая же проблема с Chrome. Вам необходимо вручную перезагрузить страницу:
<a href="javascript:window.print();window.location.reload()">Print</a>
Ответ 4
Если кто-то использует VS2013 с хром, эта проблема вызвана функциональностью BrowserLink.
см. здесь ответ здесь
Ответ 5
Я уверен, что вы столкнулись с этой проблемой, потому что на вашей странице есть элемент видео, скорее всего, MP4.
Если вы отключите это видео/или имеете видео OGV, печать должна работать нормально.
Это ошибка в самом хроме из-за ограничений в реализации видео Chrome. Также важно отметить, что если пользователь печатает вручную с помощью ctrl-p/cmd-p, функции печати правильно
http://code.google.com/p/chromium/issues/detail?id=141633
Надеюсь, что это поможет:)
Ответ 6
Аналогичное поведение в Safari. Это вызвано открытыми HTTP-запросами (-ами) на фоне.
Когда выполняется какой-либо HTTP-запрос, window.print()
выполняется успешно, но диалог не открывается!
У вас будет эта проблема, , когда вы используете длительный опрос (для push-сервера). Поскольку клиент уже давно будет использовать HTTP-соединение, window.print()
никогда не будет работать.