浏览器中打印pdf被阻止:
首页->学习资料->web前端 关键词: 发布时间:2024-09-13 14:37:09 浏览次数:572

最近遇到个奇怪的问题,页面上有个打印功能,点击后调用后端接口,后端生成一个pdf文件,并返回路径,前端根据路径在浏览器中打开pdf文件

在本地可以正常运行,部署到服务器后就不行了,奇怪的是,有些页面的又可以,经反复排查,是前端问题:

用download方法就会被浏览器阻止,如果用window.open就不会
//下载
    download(url){
      let link = document.createElement('a');
      link.href = url;
      link.target = '_blank';
      link.download = url;
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
    },
    //打印
    exportList(id){
      statementPrintData(id).then(res => {
//调用download就会被浏览器阻止
        //this.download(process.env.VUE_APP_API_URL_FILE+'/'+res.data.url)
//调用window.open就举动 
        window.open(Setting.fileBaseURL + '/' + res.data.url,'_blank')
      }).catch(err => {
        this.$message.error(err.msg)
      })
    },


原因:

这是因为现代浏览器出于安全考虑,会阻止一些未经用户明确操作的文件下载行为,尤其是通过动态创建链接并触发点击事件的方式。在 download 方法中,即使你手动创建了 <a> 标签并模拟点击下载,浏览器可能仍认为这是不安全的下载行为,尤其是在 HTTPS 环境下。

相比之下,window.open 是浏览器允许的操作之一,打开新窗口或标签页进行文件的下载或展示,不会触发浏览器的安全下载机制。因此,浏览器不会阻止使用 window.open 触发的文件下载。

你可以继续使用 window.open 来避免浏览器的安全限制。这一结果也表明,通过 window.open 打开的文件下载会被视为用户主动发起的请求,因而不会触发安全下载机制。


赞:(0)
踩:(0)
相关文章
热门文章
win7中将文件拷贝到虚拟机linux下
phpexcel设置行高及列宽,背景颜色,
rabbitmq无法启动
intellij idea不显示git push按钮
php7中使用mongodb的aggregate进行
laravel页面静态化的方法
centos7.4 64位下swoole安装及配置
navicate连接mycat报1184错误
curl设置超时不起作用(CURLOPT_TIM
devops-jenkins容器为pending状态
好评文章
phpexcel设置行高及列宽,背景颜色,
php7中使用mongodb的aggregate进行
intellij idea打开文件所在文件夹
windows下使用MongoDB Compass Com
win7中将文件拷贝到虚拟机linux下
laravel 中悲观锁 & 乐观锁的使用
单点登录sso原理及php实现方式及de
navicate连接mycat报1184错误
rabbitmq无法启动
laravel整合dingo/api方法步骤:jwt
标签
rabbitmq mysql备份 elasticsearch golang swoole
我的项目
【github】www.github.com/hurong241
【码云】gitee.com/hu_rong/projects
【docker hub】hub.docker.com/repositories/hurong241
【packagist】packagist.org/users/hurong241/packages
站点信息
建站时间:2011年
文章数:623篇
浏览数:1300144
粤ICP备18028092号-1  微信:hurong241