2

カスタムの誕生日テンプレートを PDF 形式で生成するサービスがあります。ユーザーにはクレジットがあり、ボタンをクリックすると、作成された pdf ファイルの番号を取得するために ajax 呼び出しが実行され、window.locationを使用してユーザーに pdf が表示されます。

chrome と firefox では問題ありませんが、IE は、ユーザーの同意を求める一般的なバーのポップアップで pdf をブロックします。ユーザーが同意して「はい」をクリックしても何も起こらず、バックエンドでユーザーのクレジットがすでにカウントされている間に有効にするには、ユーザーはボタンを再度クリックする必要があります。

Web サイトのユーザー ベースは主に高齢者であり、Google アナリティクスによると、私のユーザーの 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 に答える