Подтвердить что ты не робот

Диалог 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(), но это ничего не изменило. Когда я отлаживаю содержимое страницы, которое должно быть напечатано, выглядит совершенно загруженным.

Прошу прощения, но я ничего не нашел при исследовании. Любая помощь будет оценена!

Спасибо!

4b9b3361

Ответ 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() никогда не будет работать.