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();
好的,这段代码可以使用!
使用HTTPS时不在IE6和IE7中
当使用带有HTTPS的IE6时,它会生成一个另存为对话框(不是在浏览器中打开的pdf) 使用带有HTTPS的IE7时,会导致出现空白屏幕 使用Firefox时,它可以正常工作
如果我在page_load中模拟额外的服务器端处理以将所需数据放入会话中并使用在新窗口中打开相同pdf生成页面的链接替换该按钮,则代码可以正常工作。
对于实际应用程序,在单击按钮之前无法获取所需数据。
所以我真的想让以下代码工作
string page = Request.ApplicationPath + "/ApkRapportPage.aspx";
Response.Write("<script language=\"javascript\">window.open('" + page + "','_new');</script>");
问题: 有人知道为什么这个代码在使用HTTPS时在IE6和IE7中不起作用? 让代码工作需要什么?
额外信息:
非常感谢任何帮助!
按要求提供标题,如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
答案 0 :(得分:0)
获取附件以打开您想要的方式与您发送的标头有关。如果您找到想要充当动态PDF资源的.aspx页面,这些HTTP标头将变得越来越重要。
This website说明了为什么它可能无法在IE中运行的一些原因。
编辑:,因为您已经尝试了以上所有内容,我只能指向rfc for content disposition据我所知,这是告诉浏览器如何处理二进制内容的唯一方法
编辑:当您尝试在浏览器中打开pdf时,真正有用的是查看当前返回的HTTP标头。 Fiddler does a great job at catching traffic
答案 1 :(得分:0)
最好使用通用处理程序(.ASHX)来提供此类内容,而不是试图强制网页提供HTML以外的内容。
答案 2 :(得分:0)
经过大量的反复试验后,我找到了一个有效的解决方案,仍然不确定为什么其他代码不起作用。
此代码有效:
StringBuilder js = new StringBuilder("<script language=\"javascript\">");
js.Append("_window = window.open(\"\",'_new');");
js.Append("_window.document.open(\"application/pdf\");");
js.Append("_window.location.href = \"ApkRapportPage.aspx\";");
js.Append("_window.document.close();");
js.Append("</script>");
Response.Write(js.ToString());
必须与mime类型有关。
虽然有问题。当IE设置为在HTTP和HTTPS之间切换时显示时,此代码将给出该消息两次。以下代码不会切换,但会导致ApkRapportPage的页面加载被触发两次。
StringBuilder js = new StringBuilder("<script language=\"javascript\">");
js.Append("_window = window.open(\"ApkRapportPage.aspx\",'_new');");
js.Append("_window.document.open(\"application/pdf\");");
js.Append("_window.location.href = \"ApkRapportPage.aspx\";");
js.Append("_window.document.close();");
js.Append("</script>");
Response.Write(js.ToString());
答案 3 :(得分:0)
如果您在IE7浏览器中尝试查看内联PDF并且使用的是Acrobat版本6时获得空白页面。请更新您的Acrobat版本以解决问题。
答案 4 :(得分:0)
请注意,此问题与HTTPS无关,同样的问题(以及相同的修复程序)适用于HTTP。
修复有效,因为IE的问题在于,如果立即加载PDF,它不会在脚本打开的窗口中显示PDF。 (不明原因,但这是问题的核心,也是修复。)
答案 5 :(得分:0)
我注意到您退回的内容类型是
“Content-Type:application / pdf; charset = utf-8”
将内容流式传输到aspx页面时,请确保设置
Response.charset = ""