iframe调用contentWindow.print()空白
时间: 2023-07-11 14:32:37 浏览: 1442
如果在 `iframe` 中调用 `contentWindow.print()` 方法出现空白页,可能有以下几个原因:
1. `iframe` 中的页面加载完成之前就调用了 `contentWindow.print()` 方法,此时打印的是空白页。可以通过在 `window.onload` 事件中调用 `contentWindow.print()` 方法来避免这个问题。
```javascript
const iframe = document.querySelector('iframe');
iframe.onload = function() {
iframe.contentWindow.print();
}
```
2. `iframe` 中的页面中包含了未加载完成的资源,例如图片、样式等,这些资源加载完成之前打印的也是空白页。可以通过在 `window.onload` 事件中等待所有资源加载完成之后再调用 `contentWindow.print()` 方法来避免这个问题。
```javascript
const iframe = document.querySelector('iframe');
iframe.onload = function() {
const checkPrint = setInterval(function() {
if (iframe.contentWindow.document.readyState === 'complete') {
clearInterval(checkPrint);
iframe.contentWindow.print();
}
}, 100);
}
```
3. `iframe` 中的页面中存在跨域资源,例如图片等,这些资源无法被 `iframe` 访问,因此打印的是空白页。可以通过将跨域资源放在同一域名下,或者在 `iframe` 中使用 `postMessage` 等方式与父页面通信来避免这个问题。
需要注意的是,由于跨域访问的限制,如果 `iframe` 的内容来自不同的域名,访问 `contentWindow` 时可能会抛出安全异常,此时无法打印 `iframe` 的内容。
阅读全文