Подтвердить что ты не робот

Как распечатать IFrame из javascript в Safari/Chrome

Может кто-нибудь, пожалуйста, помогите мне распечатать содержимое IFrame через javascript-вызов в Safari/Chrome.

Это работает в firefox:

$('#' + id)[0].focus();
$('#' + id)[0].contentWindow.print();

это работает в IE:

window.frames[id].focus();
window.frames[id].print();

Но я не могу заставить что-то работать в Safari/Chrome.

Спасибо

Эндрю

4b9b3361

Ответ 1

Поместите функцию печати в iframe и вызовите ее из родителя.

IFrame:

function printMe() {
  window.print()
}

Родитель:

document.frame1.printMe()

Ответ 2

Вот мое полное кросс-браузерное решение:

На странице 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, выпущенных, так как у меня была эта проблема. У меня нет времени для повторного расследования этого вопроса прямо сейчас, но, если вы застряли, я предлагаю вам прочитать все комментарии в этой всей теме!

Ответ 3

Я использовал 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

Ответ 4

В дополнение к решениям 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;
}

Ответ 5

Использовать 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>

Ответ 6

Следует отметить, что если вы тестируете это локально, используя файл:///, он не будет работать на chrome, поскольку функция в iframe будет отображаться как undefined. Однако однажды на веб-сервере он будет работать.

Ответ 7

Мне пришлось внести несколько изменений, чтобы сделать это в 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>

Ответ 8

Вы можете использовать

parent.frames['id'].print();

Работайте в Chrome!

Ответ 9

Вы также можете использовать

top.iframeName.print();

или

parent.iframeName.print();

Ответ 10

"framePartsList.contentWindow.print();" не работал в IE 11 ver11.0.43

Поэтому я использовал framePartsList.contentWindow.document.execCommand('print', false, null);

Ответ 11

Используйте это:

window.onload = setTimeout("window.print()", 1000);