https を使用した IE6 および IE7 での PDF の間違ったエラー

StackOverflow https://stackoverflow.com/questions/614784

  •  03-07-2019
  •  | 
  •  

質問

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 では発生しません。

IE6をHTTPSで使用すると、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 で機能しない理由を知っている人はいますか?コードを機能させるには何が必要ですか?

追加情報:

  • respons.writeを使用しなかったが、JavaScriptウィンドウだけを使用してボタンの後ろにオープンしましたが、これは同じ効果があります
  • PDFストリーミングをグーグルで検索するとき、これに問題がある多くの人が見つかります。ほとんどの場合、IISのヘッダー長またはその他のプロパティまたは静的ファイル圧縮フラグを設定します。私はそれらすべてを試したと確信しています。
  • Adobe Acrobat Readerの設定、ブラウザの設定、またはその他のクライアント側の設定は問題ではないようです。HTTPが機能し、HTTPSを使用して、異なるマシンでテストされていません。
  • HTTPとHTTPを切り替えることはこれと関係があるかもしれませんが、IEを設定して切り替えているときに教えてくれると、テスト中に切り替えは発生しないようです。
  • window.open 部分をresponse.redirect に置き換えると、コードも機能しますが、新しいウィンドウでは機能しません。

助けていただければ幸いです。


リクエストに応じて、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
役に立ちましたか?

解決 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 タイプと関係があるはずです。

ただし問題があります。IE が HTTP と HTTPS を切り替えるときに表示されるように設定されている場合、このコードはそのメッセージを 2 回表示します。次のコードは切り替えませんが、ApkRapportPage のページ読み込みが 2 回実行されます。

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

他のヒント

添付ファイルを希望どおりに開くことができるかどうかは、送信するヘッダーにすべて関係します。動的 PDF リソースとして機能する .aspx ページを指定する場合、これらの HTTP ヘッダーの重要性がますます高まります。

このウェブサイト IE で動作しない理由をいくつか述べています。

  1. 応答のコンテンツ タイプを「application/pdf」に設定します。例:response.setContentType("アプリケーション/pdf");
  2. 次のように URL の末尾にダミー パラメータを追加します。 http://x.y.z/DoGenCompStmt?filename=dummy.pdfIE はコンテンツ タイプを無視するため、ヒントを与える必要があります。拡張子「.pdf」を使用するのが簡単です。
  3. 応答に「content-length」を設定します。そうしないと、Acrobat Reader プラグインが正しく動作しない可能性があります。応答.setContentLength(bos.size());
  4. 一部の IE ブラウザーに役立つと思われる追加の機能として、次の機能もあります。response.setHeader("Content-Disposition", "inline;filename=somepdf.pdf");

編集: あなたはすでに上記のすべてを試しているので、私があなたに教えることができるのは、 コンテンツの処分に関する RFC 私の知る限り、これがブラウザにバイナリ コンテンツの処理方法を伝える唯一の方法です。

編集:実際に役立つのは、ブラウザで PDF を開こうとしたときに現在返されている HTTP ヘッダーを確認することです。 Fiddler はトラフィックをキャッチするのに優れた仕事をします

この種のコンテンツを提供するには、Web ページに HTML 以外のコンテンツを強制的に提供するよりも、汎用ハンドラー (.ASHX) を使用する方が良いでしょう。

Acrobat バージョン 6 を使用していて、IE7 ブラウザで PDF をインラインで表示しようとすると空白のページが表示される場合。問題を解決するには、Acrobat のバージョンを更新してください。

この問題は HTTPS とは関係がなく、同じ問題 (および同じ修正) が HTTP にも当てはまります。

IE の問題は、PDF が一度にロードされた場合、スクリプトで開かれたウィンドウに PDF が表示されないことであるため、この修正は機能します。(理由は不明ですが、これが問題の核心であり、修正です。)

返された content-type が hosed であることに気付きました

「コンテンツタイプ:申請書/PDF;文字セット=utf-8"

コンテンツを aspx ページにストリーミングするときは、必ず

Response.charset = ""
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top