谷歌浏览器 - PDF在iFrame中下载无效

时间:2017-08-29 19:41:04

标签: javascript google-chrome pdf iframe downloading

因为最近的Chrome更新阻止了使用javaScript直接打开数据URL:"不允许将顶部框架导航到数据URL",我有一些我需要修改的代码。我有一个使用mPDF生成PDF的ajax调用,将其发送回base 64 - 并且应该在新选项卡中打开。这总是奏效的。但是由于这个问题,我现在要做的是将PDF加载到新窗口中的iFrame中以避免错误。这是有效的,这就是我所拥有的:

$('.print-order-pdf').click(function(){

    var orderNumber = $(this).attr('order')
    var data = {
        pdfnonce: pdfAjax.pdfnonce,  
        action: 'getOrderPDF',
        orderNumber: orderNumber,
    }
    var win = window.open('', '_blank');
    $.post(pdfAjax.ajax_url, data, function(return_url){           
        win.document.write("<iframe id='pdf' src='"+ return_url +"'></iframe>");
        win.document.write("<style> html, body{ overflow:hidden; margin:0; } #pdf{ width:100%; height: 100%; }</style>");
    });

});

(这是一个wordPress Ajax调用)。在任何情况下 - 它都可以工作,并打开带有PDF的新页面。问题是 - 在Chrome中,作为PDF控件的一部分显示的下载链接不再有效。我可以打印,旋转,等等 - 但不能下载文件。我在firefox中测试过,没有问题触发了那里的下载。 PDF窗口的Chrome控制台完全没有显示任何错误。有任何想法吗? Chrome中是否存在特定内容阻止从iFrame内部下载?为什么?有办法吗?

非常感谢。

1 个答案:

答案 0 :(得分:3)

我的情况就是这样! 我使用的是Chrome版61.0.3163.100。 我想这是一些浏览器漏洞,但我在谷歌的论坛上找不到任何东西。 我怀疑是否直接下载文件但不想放弃chrome PDF查看器。

暂时,我找到了一个丑陋而不雅的解决方案,直到我得到明确的答案。我在生成的窗口中创建了一个链接:

var newWindow = window.open("", "PDF", 'dependent=yes,locationbar=no,scrollbars=no,menubar=no,resizable,screenX=50,screenY=50,width=850,height=800');
newWindow.document.write(
'<html><body><center>' +
'<a title="Download File" style="font-family: \'Verdana\';color: #333;text-decoration: none;font-weight: 600;" download="File.PDF" href="data:application/pdf;base64,' + base64 + '">Download File</a>' +
'</center><br>' +
'<object width=100% height=100% type="application/pdf" data="data:application/pdf;base64,' + base64  + '">' +
'<embed type="application/pdf" src="data:application/pdf;base64,' + base64  + '" id="embed_pdf"></embed>' +
 '</object></body></html>');
 newWindow.window.focus();