1

以前にも同様の質問があったことは知っていますが、これには多少の違いがあると思います。

私のウェブページにはIframe. この iframe は、他のドメインからページを読み込みます (クロスドメイン スクリプティングが実行されています)。この iframe のボタンをクリックすると、AJAXリクエストが送信jQueryされ、サーバー上にテキスト ファイルが作成されPHPます。ここで、ユーザーがサーバーからそのファイルをダウンロードできるように、通常の [名前を付けて保存] ダイアログ ボックスが表示されるようにします。

PHP 側ですべての機能を試しContent-Dispositionましたが、ファイルがサーバー上に正常に作成されているにもかかわらず、 [名前を付けheader()て保存] ダイアログが表示されません。問題は、他のドメインからコンテンツをロードしている iframe からファイルのダウンロードをトリガーしたいことだと思います。

これに対する回避策はありますか?

ありがとう。

4

1 に答える 1

1

私は自分で解決策を見つけました。テクニックをAJAX使う代わりに。IframejQueryのコードを iframe に記述します。AJAXサーバーにリクエストを送信する代わりに、iframe を介してダウンロードをトリガーします。

$(document).ready(function(){
    $('#download').click(function(){
        var ifr = $('<iframe id="secretIFrame" src="" style="display:none; visibility:hidden;"></iframe>');
        $('body').append(ifr);
        var iframeURL = 'http://you_domain.com/download.php?str='+encodeURIComponent(data_to_be_posted);
        ifr.attr('src', iframeURL);
        return false;
    });
});

これはのコードですdownload.php

<?php
$str = html_entity_decode($_REQUEST['str']);

$file_name = 'export_data.txt';

header("Cache-Control: ");// leave blank to avoid IE errors
header("Pragma: ");// leave blank to avoid IE errors
header("Content-Disposition: attachment; filename=\"".$file_name."\"");
header("Content-length:".(string)(filesize($str)));
header("Content-Type: application/force-download");
header("Content-Type: application/download");
header('Content-Type: application/octet-stream');
header('Content-Type: application/txt');
header("Content-Transfer-Encoding: binary ");
echo $str;
exit;
?>
于 2012-09-26T09:21:51.297 に答える