Safari: предотвращение двух диалогов печати при печати Iframe - PullRequest
8 голосов
/ 15 июля 2010

На моем сайте есть кнопка «напечатать эту страницу».

Я загружаю файл HTML шаблона статической печати в скрытый iframe, копирую HTML-код на эту страницу с помощью jQuery и вызываю window.print() из Iframe.стр.Все хорошо, за исключением Safari, который также хочет напечатать родительский фрейм, поэтому у меня открывается два диалоговых окна печати. ​​

Я попытался вызвать window.print изнутри iframe и вызвать его изparent, нацеливаясь на iframe (document.printFrame.window.print()), но я получаю два диалоговых окна независимо.

Кто-нибудь знает способ обойти это?Я хочу напечатать только Iframe, а не родительский.

Ответы [ 2 ]

1 голос
/ 19 июля 2010

Я не могу воспроизвести ошибку; он прекрасно работает для меня (т.е. я получаю только один диалог печати), независимо от того, вызываю ли я его из iframe или из родительского фрейма. Может быть, вы где-то дважды вызываете window.print ()?

Я использую Safari 4.0.3 на Mac OS X 10.6

РЕДАКТИРОВАТЬ: Вот оно: http://jsfiddle.net/Kq9dc/

РЕДАКТИРОВАТЬ 2: Я только что проверил это на Safari 5.0 / Windows 7, и он работает правильно. Вы уверены, что это не что-то еще в вашем коде?

РЕДАКТИРОВАТЬ 3 : только что протестировал это на нескольких версиях Safari на WinXP:

Safari 3.0 (first beta): Not working (no print dialog)
Safari 3.1 (first non-beta): Works fine
Safari 4.0: Works fine
Safari 5.0: Works fine
0 голосов
/ 23 июля 2010

Попробуй это.Поместите это в указанный iframe:

function printPage() { print(); }

, затем в родительский:

function printIframe(id)
{
    var iframe = document.frames ? document.frames[id] : document.getElementById(id);
    var ifWin = iframe.contentWindow || iframe;
    iframe.focus();
    ifWin.printPage();
    return false;
}

Если это тоже не сработает, я бы попробовал открыть новое окно / вкладку и заполнить егос печатаемым HTML.

var printwin = window.open("about:blank", "_new");
printwin.document.open();
printwin.document.write("HTML goes here..javascript which is going to print is in there too..");
printwin.document.close();

Следует обратить внимание на две незначительные вещи:

  • разбиение </script> в новом окне, поэтому вы не прекратите преждевременно
  • используйте setTimeout () для выполнения после завершения onLoad (), в противном случае пользователи Firefox могут увидеть пустую страницу под диалоговым окном печати
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...