Я бы использовал другой 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непосредственно это то, что вы увидите:

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()
: (вы их не увидите)

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