0

次のように、APK のダウンロードを開始する PHP スクリプトにリダイレクトするボタンのあるページがあります ($androidPackage はファイル名で、$package は絶対パスを含みます)。

   header('Content-Description: File Transfer');
   header('Content-Type: application/vnd.android.package-archive');
   header('Content-Disposition: attachment; filename=' . $androidPackage);
   header('Content-Transfer-Encoding: binary');
   header('Expires: 0');
   header('Cache-Control: must-revalidate');
   header('Pragma: public');
   header('Content-Length: ' . filesize($package));
   ob_clean();
   flush();
   readfile($package);
   exit; 

このアプローチは、いくつかの Android デバイスの Chrome、すべての主要なデスクトップ ブラウザー、および一部の Android デバイスのストック ブラウザーで機能します。ただし、私の携帯電話 (HTC Rezound) と Galaxy Tab 2 のストック ブラウザーでは、ボタンを短く押してもダウンロードが機能しません。これらのデバイスの Chrome では機能しますが、ダウンロードは開始されません。ボタンを長押しし、表示されるコンテキスト メニューから [開く] を選択すると、ストック ブラウザから APK をダウンロードできます。ストックブラウザを短く押してもダウンロードが開始されない理由について何か考えはありますか?

編集:

このダウンロードへのリンクに使用されるボタンは iframe 内にあることに注意してください。代わりに、ドキュメントの読み込み時にスクリプトのソースを iframe に読み込む代わりに document.location.href = (スクリプト URL のダウンロード) を実行すると、ダウンロードは短押しで機能します。ストックブラウザがiframeを処理する方法と関係がありますか? ページとそれが指すスクリプトは同じドメインにあります。

4

2 に答える 2

1

octet-streamコンテンツ タイプを次のように変更します。

header('Content-Type: application/octet-stream');
于 2013-05-09T15:56:40.650 に答える