カスタムの誕生日テンプレートを 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 でも発生します。