Google Chrome не печатает мой контент, созданный на Javascript и AJAX

#google-chrome #printing

#google-chrome #печать

Вопрос:

Я разработчик веб-приложения.

Chrome правильно отображает мои веб-страницы, созданные на Javascript и AJAX, но когда я пытаюсь их распечатать (с помощью собственной функции) Я получаю пустую страницу.

Печать отлично работает в других браузерах.

Я пробовал печатать страницы, созданные на стороне сервера, с помощью Chrome, и они печатаются нормально.

Что может быть не так на веб-страницах моего веб-приложения? Я думаю, проблема в том, что эти страницы динамически генерируются Javascript и AJAX.
Я говорю это, потому что я только что узнал, что я даже не могу правильно сохранить эти страницы в Chrome (весь динамический HTML не отображается).

Я в Google Chrome 13.0.782.112.
Как я могу отладить и устранить эту проблему? Есть ли какой-либо обходной путь? Кому-нибудь удается печатать динамический контент с помощью Google Chrome?

Эта проблема сводит меня с ума!

PS: некоторые из моих пользователей сообщают о той же проблеме в Safari 🙁

ОБНОВЛЕНИЕ: обновлен до Chrome 14.0.835.202, но проблема все еще существует…

Комментарии:

1. Не могли бы вы опубликовать какой-нибудь код, чтобы мы могли его просмотреть?

2. Я только что сделал тестовую скрипку , и у меня все работает нормально. Вы используете другой код или что-то в этом роде?

Ответ №1:

У меня была точно такая же проблема, хотя и не в Chrome (хотя я на самом деле не тестировал с Chrome). В некоторых браузерах (и я не могу вспомнить, в каких из них, но это было либо в IE, либо в FF), любой контент, добавленный в DOM с помощью JavaScript, не печатается. На самом деле печатается исходный документ, который был отправлен в браузер.

Я успешно решил это, используя следующую функцию JavaScript:

 function docw()
{
    var doct = "<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">";
    document.write(doct   document.getElementsByTagName('html')[0].innerHTML);
}
  

Это вызывается, когда обработка страницы JavaScript завершена. Он фактически считывает весь DOM, а затем перезаписывает весь документ обратно в себя с помощью document.write . Теперь это позволяет печатать для моего конкретного проекта как в IE, так и в FireFox, хотя я почти уверен, что один из них уже работал в первую очередь, а другой — нет (не могу вспомнить, какой из памяти, и это не тот проект, который я могу вытащить для тестирования в данный момент). Решит ли это проблему в Chrome, я не знаю, но попробовать стоит.

Редактировать Ужасно жаль, но я полный плебей. Я просто перечитал свои старые комментарии, и это решение не имело никакого отношения к печати; на самом деле это было для устранения проблемы, из-за которой при сохранении в файл сохранялся только исходный обслуживаемый документ. Тем не менее, я все еще задаюсь вопросом, стоит ли это того.

Комментарии:

1. Ты лучший, Тревор! Потрясающе! Как я счастлив! Пожалуйста, все проголосуйте за этот ответ: мой вопрос был довольно расплывчатым, и я не показал никакого кода, но его фрагмент был полностью на месте!

2. Ха, показывает, что иногда стоит рисковать! Рад, что это помогло!

Ответ №2:

Это помогло мне решить связанную проблему — как просмотреть / сохранить сам динамически сгенерированный HTML. Я придумал следующий букмарклет.

 javascript:(function(){document.write('<pre>' (document.getElementsByTagName('html')[0].innerHTML.replace(/amp;/g,'amp;amp;').replace(/</g,'amp;<').replace(/>/g,'amp;>')) '</pre>')})()
  

Я запускаю это и «выбираю все» / копирую, а затем (в Linux) выполняю «xclip -out», чтобы направить большой объем данных буфера обмена в файл.

Ответ №3:

Ответ Тревора полностью сработал для меня — с помощью jquery я просто сделал что-то вроде

 $("html").html $("html").html()
  

сработало отлично