【发布时间】:2009-03-05 13:40:52
【问题描述】:
Response.Write("<script language=\"javascript\">window.open( with https and pdf
我们在 Asp.Net 1.1.4332 应用程序中执行的操作如下:
一个按钮触发一个服务器事件,该事件执行一些处理并将数据放入会话对象中,然后执行以下代码:
string page = Request.ApplicationPath + "/ApkRapportPage.aspx";
Response.Write("<script language=\"javascript\">window.open('" + page + "','_new');</script>");
这会打开一个页面,将 pdf 流式传输到新的浏览器窗口
基本上使用以下代码(我知道这里缺少一些东西,但这并不真正适合这个问题)
byte[] pdfbytes = Convert.FromBase64String(rapportB64);
Response.ClearContent();
Response.ClearHeaders();
Response.Buffer = true;
Response.ContentType = GetContentType(format);
string header = GetContentDispostionHeader(fileName, format, type);
Response.AddHeader("Content-Disposition", header);
Response.BinaryWrite(pdfbytes);
Response.End();
好的,这段代码有效!
只是在 IE6 和 IE7 中使用 HTTPS 时不行
当使用带有 HTTPS 的 IE6 时,它会导致一个另存为对话框(不是在浏览器中打开的 pdf) 将 IE7 与 HTTPS 一起使用时,会导致空白屏幕 使用 Firefox 时效果很好
如果我在 page_load 中模拟额外的服务器端处理以将所需数据放入会话中,并将按钮替换为在新窗口中打开相同 pdf 生成页面的链接,则代码有效。
对于实际应用程序,在单击按钮之前获取所需数据不是一个选项。
所以我真的很想让下面的代码工作
string page = Request.ApplicationPath + "/ApkRapportPage.aspx";
Response.Write("<script language=\"javascript\">window.open('" + page + "','_new');</script>");
问题: 有谁知道为什么在使用 HTTPS 时这段代码在 IE6 和 IE7 中不起作用? 需要什么才能让代码工作?
额外信息:
- 我尝试不使用 response.write 但 只是一个javascript window.open 后面 按钮,这个效果是一样的
- 在谷歌上搜索 pdf 流时,你会发现很多人都有 麻烦了,主要是他们设置 标题长度或其他属性或 IIS 中的静态文件压缩标志。 我很有信心我试过了 全部。
- Adobe acrobat 阅读器设置、浏览器设置或任何其他客户端 侧面设置似乎不是 问题。测试不同 机器,使用 http 工作,使用 https 它没有。
- 在 https 和 http 之间切换可能与此有关, 但是当我设置 IE 时告诉我我什么时候 正在切换,似乎没有切换 在测试期间发生。
- 当用 response.redirect 替换 window.open 部分时,代码也可以工作,只是不在新窗口中
任何帮助将不胜感激!
按照 Fiddler 所示的请求头:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Thu, 05 Mar 2009 14:18:36 GMT
X-Powered-By: ASP.NET
X-AspNet-Version: 1.1.4322
Content-Disposition: Inline;filename=APKrapport.pdf
Cache-Control: private
Content-Type: application/pdf; charset=utf-8
Content-Length: 28307
【问题讨论】: