我有一个简单的脚本,可以使用javascript打开一个新窗口:
<script type="text/javascript">
window.open("/test/test.aspx", "", "", "");
</script>
这在处理普通网页时效果很好,但是当我尝试使用以下代码下载pdf文件时
context.Response.ContentType = "application/pdf";
context.Response.WriteFile(fileFullName);
我可以看到窗口打开但之后会立即关闭。仅当在本地工作时,才会在访问其他服务器时显示此行为。
当使用IE8的不同浏览器时,没有问题,下载效果很好。
我暂时找到一个打开带有链接的页面的工作,以便用户点击并访问他的下载,但我不太喜欢这个解决方案。
感谢您的投入,
[编辑] 这是一个简化的代码:
第1页:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<script type="text/javascript">
window.open("/page2.aspx", "", "", "");
</script>
</div>
</form>
</body>
</html>
第2页
protected void Page_Load(object sender, EventArgs e)
{
string fileFullName = ApplicationStoringPath.TempReportPath + "00329bad-28ac-46bd-9f0a-3eced660f079.pdf";
string fileName = "test.pdf" ;
if (File.Exists(fileFullName))
{
FileStream file = File.Open(fileFullName, FileMode.Open);
long length = file.Length;
file.Dispose();
Response.AddHeader("Content-Disposition", string.Format("attachment; filename=\"{0}\"", fileName));
Response.AddHeader("Pragma", "public");
Response.AddHeader("Expires", "0");
Response.AddHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.AddHeader("Content-Length", length.ToString());
Response.ContentType = "application/pdf";
Response.WriteFile(fileFullName);
}
}
发生了什么:
从本地访问第1页打开弹出窗口并建议下载。 (IE) 从本地访问第2页建议下载。(IE)
从不同的PC访问第1页会打开弹出窗口,不建议下载。 (IE) 从不同的PC访问第2页建议下载。 (IE)
从不同的PC访问第1页打开弹出窗口并建议下载。 (火狐) 从不同的PC访问第2页建议下载。 (Firefox)的
这不是一些弹出窗口阻塞的情况。我尝试访问的文件位于托管我的页面的站点的临时文件夹中,即同一服务器。
[编辑]
答案 0 :(得分:2)
在我的情况下文件正在下载但是没有显示打开 - 保存弹出窗口。我刚刚启用了“自动提示文件下载”并且工作正常:)
打开Internet Explorer&gt;工具&gt;互联网选项&gt;安全&gt;自定义级别&gt;下载 : 为“自动提示文件下载”选择“启用”。
答案 1 :(得分:0)
你是否在IE8上有一个尚未配置的弹出窗口拦截器?
答案 2 :(得分:0)
非常感谢您的帮助。
无论我尝试使用弹出窗口都没有成功,因此我尝试使用iframe进行下载。幸运的是,它就像一个魅力。
然后我现在使用相同的代码:
<iframe id="DownloadIFrame" visible=false height=1 width=1></iframe>
<script type="text/javascript">
document.getElementById('DownloadIFrame').src = "/page2.aspx";
</script>