Ответ 1
Поместите функцию печати в iframe и вызовите ее из родителя.
IFrame:
function printMe() {
window.print()
}
Родитель:
document.frame1.printMe()
Может кто-нибудь, пожалуйста, помогите мне распечатать содержимое IFrame через javascript-вызов в Safari/Chrome.
Это работает в firefox:
$('#' + id)[0].focus();
$('#' + id)[0].contentWindow.print();
это работает в IE:
window.frames[id].focus();
window.frames[id].print();
Но я не могу заставить что-то работать в Safari/Chrome.
Спасибо
Эндрю
Поместите функцию печати в iframe и вызовите ее из родителя.
IFrame:
function printMe() {
window.print()
}
Родитель:
document.frame1.printMe()
Вот мое полное кросс-браузерное решение:
На странице 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;
}
Обновление: у многих людей возникают проблемы с этим в версиях IE, выпущенных, так как у меня была эта проблема. У меня нет времени для повторного расследования этого вопроса прямо сейчас, но, если вы застряли, я предлагаю вам прочитать все комментарии в этой всей теме!
Я использовал Andrew script, но добавил фрагмент перед вызовом функции printPage(). IFrame нуждается в фокусе, иначе он все равно будет печатать родительский фрейм в IE.
function printIframe(id)
{
var iframe = document.frames ? document.frames[id] : document.getElementById(id);
var ifWin = iframe.contentWindow || iframe;
iframe.focus();
ifWin.printPage();
return false;
}
Не благодарю меня, но это Андрей написал. Я просто сделал настройку = P
В дополнение к решениям Andrew и Max, используя iframe.focus(), появилась печать родительского фрейма вместо того, чтобы печатать только дочерний iframe в IE8. Изменение этой строки зафиксировало это:
function printIframe(id)
{
var iframe = document.frames ? document.frames[id] : document.getElementById(id);
var ifWin = iframe.contentWindow || iframe;
ifWin.focus();
ifWin.printPage();
return false;
}
Использовать firefox window.frames
, но также добавить свойство name
, поскольку он использует iframe в firefox
IE:
window.frames[id]
Firefox:
window.frames[name]
<img src="print.gif" onClick="javascript: window.frames['factura'].focus(); parent['factura'].print();">
<iframe src="factura.html" width="100%" height="400" id="factura" name="factura"></iframe>
Следует отметить, что если вы тестируете это локально, используя файл:///, он не будет работать на chrome, поскольку функция в iframe будет отображаться как undefined. Однако однажды на веб-сервере он будет работать.
Мне пришлось внести несколько изменений, чтобы сделать это в IE8 (не тестировалось с другими IE-аксессуарами)
1) document.frames [param] похоже, принимают число, а не ID
printIframe(0, 'print');
function printIframe(num, id)
{
var iframe = document.frames ? document.frames[num] : document.getElementById(id);
var ifWin = iframe.contentWindow || iframe;
ifWin.focus();
ifWin.printPage();
return false;
}
2) У меня был диалог печати, отображаемый при загрузке страницы, а также была ссылка на "Нажмите здесь, чтобы начать печать" (если она не началась автоматически). Чтобы получить его работу, мне пришлось добавить вызов focus()
<script type="text/javascript">
$(function(){
printPage();
});
function printPage()
{
focus();
print();
}
</script>
Вы можете использовать
parent.frames['id'].print();
Работайте в Chrome!
Вы также можете использовать
top.iframeName.print();
или
parent.iframeName.print();
"framePartsList.contentWindow.print();" не работал в IE 11 ver11.0.43
Поэтому я использовал framePartsList.contentWindow.document.execCommand('print', false, null);
Используйте это:
window.onload = setTimeout("window.print()", 1000);