Мой сайт имеет "печать эта страница" кнопка.
Я загружаю статический файл шаблона HTML печати в скрытый iframe, копирую HTML в ту страницу с помощью jQuery и вызова window.print()
от страницы Iframe. Все хорошо, за исключением Safari, который хочет распечатать родительский кадр также, таким образом, я получаю два диалоговых открытия печати.
Я попытался назвать window.print из iframe и назвать его от родителя, будучи нацелен на iframe (document.printFrame.window.print()
) но я получаю два диалоговых окна независимо.
Кто-либо знает путь вокруг этого? Я только хочу распечатать Iframe, не родителя.
Я не могу воспроизвести ошибку; он отлично работает для меня (т.е. я получаю только одно диалоговое окно «Печать»), независимо от того, вызываю ли я его из 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
Попробуйте это. Поместите это в указанный 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();
Две незначительные вещи, на которые следует обратить внимание, это
в новом окне, чтобы вы не завершили работу преждевременно