Safari: Предотвратите два диалоговых окна печати при печати Iframe

Мой сайт имеет "печать эта страница" кнопка.

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

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

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

8
задан Diodeus - James MacFarlane 15 July 2010 в 20:39
поделиться

2 ответа

Я не могу воспроизвести ошибку; он отлично работает для меня (т.е. я получаю только одно диалоговое окно «Печать»), независимо от того, вызываю ли я его из 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
1
ответ дан 6 December 2019 в 02:24
поделиться

Попробуйте это. Поместите это в указанный 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();

Две незначительные вещи, на которые следует обратить внимание, это

  • разделение в новом окне, чтобы вы не завершили работу преждевременно
  • используйте setTimeout () для выполнения после onLoad () завершено, иначе пользователи Firefox могут увидеть пустую страницу под диалоговым окном печати
0
ответ дан 6 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: