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>");

这打开了一个网页,流a pdf到新的浏览器窗口

基本上有以下代码(我知道的东西是在这里失踪,但这并没有真正的母校的问题)

字节[]pdfbytes=转换。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

当使用IE6HTTPS它的结果在一个保存作为对话(不pdf打开浏览器) 当使用IE7HTTPS它的结果在一个空白的画面 当使用火狐它工作得很好

如果我模拟的额外服务器的端处理在page_load把所需的数据在该届会议和替换键的链接,打开了同pdf产生页中的一个新的窗口,代码的工作。

对于实际应用,它是不是一种选择,以获得所需的数据之前按钮被点击。

所以我真的很想得到下列代码的工作

string page = Request.ApplicationPath + "/ApkRapportPage.aspx";    
Response.Write("<script language=\"javascript\">window.open('" + page + "','_new');</script>");

问题: 有没有人知道为什么这种代码不起作用在IE6和IE7时使用HTTPS?有什么需要得到代码的工作?

额外信息:

  • 我尝试了不采用反应。写信但是 只是一个javascript窗口。打开后 按钮,这具有同样的效果
  • 在谷歌上搜索pdf流,您可以找到很多人 麻烦有了这个,他们大多集 标题的长度,或其他属性或 静态的文件压缩标志在IIS。我很有信心我想他们 所有。
  • Adobe acrobat reader设置,浏览器中设置或任何其他客户 边设置的似乎不是 问题。测试了不同的 机,http工作,https 它不。
  • 交换之间的https和http可能具有的东西做的这个, 但是,当我设定即告诉我,当我 我切换的,没有交换看来 期间发生的测试。
  • 在更换窗口。开放参与的反应。重定向那么代码也作品,只是不是在一个新的窗口

任何帮助,将不胜感激!


所要求的标题,如小提琴手:

   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
有帮助吗?

解决方案 3

经过大量试验和错误,我发现了一个工作方案,仍然不知道为什么其他代码不起作用。

这个代码的工作:

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类型。

它有一个问题,虽然。时即设定表示当你关之间的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());

其他提示

得到的附件,以公开的方式你想要的一切做头发送。如果你找到一个.aspx页,要作为一个动态PDF资源,这些HTTP headers变得越来越重要。

这个网站 国家一些原因为什么它可能不在即。

  1. 设定的内容类型的应对"application/pdf"。响应。setContentType("application/pdf");
  2. 添加一个虚拟参数的末端上的网址,如: http://x.y.z/DoGenCompStmt?filename=dummy.pdf 因为即忽略了内容类型,所以需要给它一个提示,"。pdf"扩展是一个简单的方法。
  3. 设置"content-length"上的响应,否则Acrobat Reader plugin可能无法正常工作。响应。setContentLength(bos。大小());
  4. 一个额外的事情,似乎有助于一些即浏览器是还有:响应。setHeader("Content-Disposition","inline;filename=somepdf.pdf");

编辑: 因为你已经尝试了所有上述,我可以仅仅指向你的 rfc内容的处置 我的知识是唯一的方式来告诉浏览器如何处理二进制的内容。

编辑:什么真正的帮助是看见HTTP Headers它目前返回当你尝试打开pdf在浏览器。 小提琴手做了伟大的工作,在捕获业务

你会更好采用一个通用的处理程序(.ASHX)服务于这样的内容,而不是试图强迫一个网页提供内容的其他比HTML。

如果你得到一个空白页时,试图PDF内联在IE7浏览器和您使用的是Acrobat第6版。更新你的杂技演员的版本,以解决的问题。

请注意此问题无关HTTPS,同样的问题(和同样的解决)适用于HTTP。

修复工作,因为该问题即是,它并没有显示PDF格式在脚本打开的窗口,如果PDF被装载在一次。(不清楚为什么,但这是问题的核心,并修复。)

我注意到你返回的内容类型是欺骗

"Content-Type:application/pdf;charset=utf-8"

当你流的内容aspx页保证你的设定

Response.charset = ""
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top