iframe 内にダウンロード ハンドラへのリンクがあります。このダウンロード ハンドラには、ヘッダーに「Content-Disposition: Attachment」が含まれており、ユーザーにファイルのダウンロードを強制します。これは、 Android デバイスを除くすべてのブラウザーで機能します。Android は、エラーやメッセージなしでファイルを無視します。Fiddler を使用すると、ハンドラーが正常に要求され、ダウンロードが正常に完了したように見えますが、ブラウザーでファイルを保存したり開いたりすることができません。
iframe の使用をやめるように言われる前に、申し訳ありませんが、現時点ではそれは私にとって選択肢ではありません。
以下は、この問題を再現するためのコードです。3 つのファイル:
- Default.aspx: DownloadPage.aspx を指す iframe が含まれています。
- DownloadPage.aspx: Download.ashx へのハイパーピンクが含まれています。
- Download.ashx: content-disposition: 添付の text/plain content-type タイプで応答します。
デフォルト.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AndroidTest.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<iframe src="DownloadPage.aspx" width="320" height="1000"></iframe>
</div>
</form>
</body>
</html>
DownloadPage.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DownloadPage.aspx.cs" Inherits="AndroidTest.DownloadPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:HyperLink NavigateUrl="~/Download.ashx" runat="server">Download</asp:HyperLink>
</div>
</form>
</body>
</html>
Download.ashx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace AndroidTest {
/// <summary>
/// Summary description for Download
/// </summary>
public class Download : IHttpHandler {
public void ProcessRequest(HttpContext context) {
context.Response.ContentType = "text/plain";
context.Response.AddHeader("Content-Disposition", "attachment;filename=\"test.txt\"");
context.Response.Write("Hello World");
}
public bool IsReusable {
get {
return false;
}
}
}
}
御時間ありがとうございます。