Распечатать два содержимого Windows как одно в iFrame - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть веб-страница с несколькими iFrames, например, 6, и я хотел бы иметь возможность печатать 2 из этих кадров как один вызов, а не захватывать contentWindow каждого кадра, а затем вызывать:

parent.iFrame1.focus();
parent.iFrame1.print();
parent.iFrame2.focus();
parent.iFrame2.print();

поскольку он печатает содержимое в двух отдельных окнах предварительного просмотра в браузере.

Я попробовал следующее, но ни одно из них не дает мне того, что я ищу или работаю для меня (то есть содержимое урезано)

Можно ли это сделать или я бью мертвую лошадь?

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

Буду признателен за любые ответы!

Потенциальные решения, которые я пробовал, которые еще недо сих пор работал:

Подождите, пока html запишет в окно, прежде чем вызывать window.print ()

Предварительный просмотр из нескольких фреймов?

https://graciesdad.wordpress.com/2007/04/19/all-in-one-printing-from-multiple-iframes/

Javascript Печать только содержимого iframe

1 Ответ

0 голосов
/ 24 ноября 2018

Я бы использовал другой iframe для этой работы.Этот iframe должен быть в том же домене.

На главной странице (например, mydomain / index.html)

<html>
  <head>
    <style>
      .print {
        visibility: hidden;
      }
    </style>
  </head>
  <body>
      <script>
        function printIframes(urls) {
          var iframe = document.createElement('iframe');
          iframe.className = "print";
          iframe.src = `print.html?urls=${encodeURIComponent(urls.join(','))}`;
          iframe.onload = function () {
            this.contentWindow.focus();
            this.contentWindow.print();
          };
          document.body.appendChild(iframe);
        }
      </script>
    </body>
</html>

Функция printIframes() принимает массив URL внешних страниц для печати.Он создает «невидимый» iframe (см. .iframe класс css), который загружает print.html с такими URL-адресами в строке запроса:

<iframe src="print.html?urls=http://example.com,http://example.com"></iframe>

Если бы вы получили доступ к этому iframeнепосредственно это то, что вы увидите:

enter image description here


In print.html например mydomain / print.html

Эта страница декодирует строку запроса urls и создает один iframe для каждого URL для загрузки.

<html>
    <body>
        <script>
          var urls = document.location.search.split('=')[1];
          urls = decodeURIComponent(urls);
          urls = urls.split(',');
          urls.forEach(url => {
            var iframe = document.createElement('iframe');
            iframe.src = url;
            document.body.appendChild(iframe)
          });
        </script>
    </body>
</html>

Пример

В этомСнимок экрана: я загружаю главную страницу (index.html) и в консоли разработчика вызываю функцию printIframes(): (вы их не увидите)

enter image description here

За которым немедленно следует запрос на печать содержимого этого iframe.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...