2

我有一项以 pdf 格式生成自定义生日模板的服务。用户有积分,当他单击按钮时,会执行 ajax 调用以获取创建的 pdf 文件的编号,然后使用window.location将 pdf 显示给用户。

chrome 和 firefox 中的一切都很好,但 IE 会通过一个通用的栏弹出窗口阻止 pdf,该栏弹出询问用户的同意。当用户接受并单击“是”时,没有任何反应,用户需要再次单击该按钮才能使其生效,而在后端,用户的信用已被计算在内。

该网站的用户群主要是老年人,我不能让这种情况发生,因为根据谷歌分析,我 60% 的用户有 IE。

这是电话:

$.ajax({
        type: "POST",
        url: "getNum.php",
        dataType: "html",
        data: {data: $.toJSON(birthday)},
        success: function(data){

            if (parseInt(data) <= 0){
                $('#waitModal').modal('hide');
                if(parseInt(data) != -10){
                    $('#signInModal').modal('show');
                } else{
                 //no credit
                }

            }else{
                window.location = "generateBirthdayCard.php?num="+parseInt(data)
            }

        }

这是显示 pdf 的脚本 (generateBirthdayCard.php):

if (!$_GET['num']) die("looking for ?url=http://www.....");
$num = trim(escapeshellarg($_GET['num']), "'");

//only if the requested refrence is an integer
if (is_numeric($num)){

   $str = file_get_contents("/tmp/$num.pdf");
   header('Content-Type: application/pdf');
   header('Content-Length: '.strlen($str));
   header('Content-Disposition: inline; filename="custom-birthday-cards.pdf"');
   header('Cache-Control: private, max-age=0, must-revalidate');
   header('Pragma: public');
   ini_set('zlib.output_compression','0');
   die($str);

}

编辑:当使用 IE8 的开发工具模拟 IE7 时,这发生在 IE8 和 IE7 中

4

1 回答 1

0

当您说“什么都没有发生”时,您是否检查了浏览器缓存中是否有新的 pdf。我在下载文件之前遇到过 IE 问题,但 IE 就是无法打开它。

尝试使用 fiddler 来查看 ajax 方法是否正确响应了 pdf。

您可以在同一个浏览器中打开其他 PDF 文件吗?例如这个

于 2012-08-20T20:58:19.173 回答