js解决pdf使用iframe打印报跨域错误问题的方法示例

本文介绍了如何在JavaScript中处理PDF跨域问题,通过将PDF转换为Blob并创建一个隐藏的iframe,实现从非同源URL安全地调用iframe的打印功能。
摘要由CSDN通过智能技术生成

教程下载地址: 网赚博客https://www.piaodoo.com/创业项目排行榜前十名https://www.piaodoo.com/


报错如下:

Uncaught DOMException: Failed to read a named property ‘print’ from ‘Window’: Blocked a frame with origin “https://xxxx.com” from accessing a cross-origin frame.
at iframe.onload (:10:26)

解决方法:

把 pdf 转 blob 二进制数据, 通过 createObjectURL 生成本地对象 url, 在创建 iframe 调用打印接口

printPDF()
function printPDF() {
  fetch('https://xxxxx.com/xxxx.pdf')
  .then(response => {
    if (!response.ok) {
      throw new Error('Network response was not ok');
    } 
    return response.blob(); // 获取二进制数据
  })
  .then(blobData => {
      // 替换这里的 PDF_URL 为你要打印的 PDF 文件链接
      const PDF_URL = URL.createObjectURL(blobData);
  // 创建一个隐藏的 iframe 元素
  const iframe = document.createElement('iframe');
  // 等待 PDF 加载完成后进行打印
  iframe.onload = function() {
    iframe.contentWindow.print();
  };
  iframe.style.display = 'none';
  iframe.src = PDF_URL;

  // 将 iframe 添加到页面中
  document.body.appendChild(iframe);

})
}

附:iframe打印pdf跨域问题,使用blob流转为同源

 <iframe :src="pdfUrl2" width="100%" height="700px" id="printMe" hidden></iframe>
 <iframe :src="pdfUrl" width="100%" height="700px"></iframe>

import axios from ‘axios’
axios({
method: ‘get’,
url: this.pdfUrl,
responseType: ‘blob’
})
.then(response => {
this.pdfUrl2= window.URL.createObjectURL(response.data)
setTimeout(() => {
document.getElementById(‘printMe’).contentWindow.print();
},2000)

})
  .catch(function(error) {
   console.log(error)
})</pre></div>

总结 

到此这篇关于js解决pdf使用iframe打印报跨域错误问题的文章就介绍到这了,更多相关js pdf用iframe打印报跨域错误内容请搜索网赚博客https://www.piaodoo.com/以前的文章或继续浏览下面的相关文章希望大家以后多多支持网赚博客https://www.piaodoo.com/!

                        友情连接:  

茂名一技http://www.szsyby.net/


茂名一技http://www.enechn.com/


美文集http://www.tpyjn.cn/


手游排行前十名http://www.bjkhrx.com/


蔚来汽车http://www.weilaiqiche.cn/

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值