Распечатайте iframe содержание в Opera и Chrome

Направляющие более стары, имеет больше плагинов, имеет большую базу пользователей, имеет в наличии лучшую документацию и поддержку. Это может также работать на JRuby предоставляющий доступа к библиотекам Java, если Вы требуете.

Grails имеет некоторые интересные качества, но не может утверждать, что произошел там с направляющими просто все же. Однако, если Вы - преимущественно Java или отличный разработчик, можно предпочесть его. Иначе, хотя, я предложил бы использовать направляющие для проектов среднего размера прямо сейчас.

6
задан Community 23 May 2017 в 11:48
поделиться

3 ответа

Это известная ошибка в Opera. В дополнение к приведенным выше идеям обходных путей вы можете поиграть с чем-то вроде этого:

    var clone=document.documentElement.cloneNode(true)
    var win=window.open('about:blank');
    win.document.replaceChild(clone, win.document.documentElement);
    win.print();

Я не тестировал это, но он должен создать копию страницы во всплывающем окне и распечатать ее без необходимости загружать контент второй раз с сервера или потеря любых модификаций DOM, которые вы хотите распечатать.

4
ответ дан 17 December 2019 в 00:11
поделиться

Я не могу воспроизвести вашу проблему с Chrome. Opera, однако, действительно по-прежнему печатает всю внешнюю страницу при попытке распечатать только iframe.

Я разработал обходной путь, и, хотя он в основном работает, он не на 100% безопасен (среди прочего, потому что Opera переносит строки для печати ; Я не знаю, как правильно рассчитать высоту в таких случаях). Тем не менее, следующий код работает как минимум разумно (с использованием jQuery для удобства):

if ($.browser.opera) {
    var ifr     = $('#youriframe');
    var ifrbody = ifr.get(0).contentDocument.body;
    var sheet   = $([
        '<style type="text/css" media="print">',
        'body * {',
        ' display: none;',
        '}',
        '#youriframe {',
        ' border: none;',
        ' display: block;',
        ' height: ', ifrbody.scrollHeight, 'px;',
        ' margin: 0px;',
        ' padding: 0px;',
        ' width: ', ifrbody.scrollWidth, 'px;',
        '}',
        '<\/style>'
    ].join(''));
    $('head').append(sheet);
    window.print();
    sheet.remove();
}

Надеюсь, это поможет.

1
ответ дан 17 December 2019 в 00:11
поделиться

Насколько я понимаю, невозможно реализовать печать iframe без открытия нового окна.

Моя функция печати:

if ($.browser.opera || (/chrome/.test(navigator.userAgent.toLowerCase()))) {
  var href = contentWindow.location.href;
  href = href.indexOf("?") > -1 ? href + "&print=1" : href + "?print=1";
  var printWindow = window.open(href, "printWindow", "scrollbars=yes");
  printWindow.focus();
}
else {
  contentWindow.focus();
  contentWindow.print();
}

Также я добавил следующий код в конец тела (когда print == 1):

<script type='text/javascript'>
  function invokePrint() {
    if (document.readyState && document.readyState!='complete')
      setTimeout(function() { invokePrint(); }, 50);
    else if (document.body && document.body.innerHTML=='false')
      setTimeout(function() { invokePrint(); }, 50);
    else {
      focus();
      print();
    }
  }
  invokePrint();
</script>
2
ответ дан 17 December 2019 в 00:11
поделиться
Другие вопросы по тегам:

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