문제

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를 새 브라우저 창으로 스트리밍하는 페이지가 열립니다.

기본적으로 다음 코드를 사용합니다 (여기에 물건이 빠졌다는 것을 알고 있지만 실제로는 질문에 대해서는 중요하지 않습니다).

바이트 [] 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을 사용하면 https와 함께 IE7을 사용할 때는 저장 대화 상자 (브라우저에서 열리는 PDF가 아님)가 발생합니다. Firefox를 사용할 때 빈 화면이 발생합니다.

Page_Load에서 추가 서버 측 처리를 시뮬레이션하여 필요한 데이터를 세션에 넣고 버튼을 새 창에서 동일한 PDF 생성 페이지를 열 수있는 링크로 바꾸면 코드가 작동합니다.

실제 응용 프로그램의 경우 버튼을 클릭하기 전에 필요한 데이터를 얻는 옵션이 아닙니다.

그래서 나는 다음 코드를 작동시키고 싶습니다.

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

질문:HTTPS를 사용할 때 왜이 코드가 IE6 및 IE7에서 작동하지 않는지 아는 사람이 있습니까? 코드가 작동하는 데 필요한 것은 무엇입니까?

추가 정보 :

  • 응답을 사용하지 않고 JavaScript Window 만 사용하려고 시도했습니다. 버튼 뒤에서 열면 동일한 효과가 있습니다.
  • PDF 스트리밍을위한 인터넷 검색을 할 때, 당신은 이것에 어려움을 겪고있는 많은 사람들을 찾을 수 있습니다. 대부분 IIS에서 헤더 길이 또는 기타 속성 또는 정적 파일 압축 플래그를 설정합니다. 나는 그들 모두를 시도했다고 확신합니다.
  • Adobe Acrobat Reader 설정, 브라우저 설정 또는 다른 클라이언트 측 설정은 문제가되지 않는 것 같습니다. HTTP 작업으로 HTTP를 사용하여 다른 기계에서 테스트되지 않았습니다.
  • https와 http 사이를 전환하면 이것과 관련이있을 수 있지만, 전환 할 때 나에게 알려 주도록 설정하면 테스트 중에는 전환이 발생하지 않는 것 같습니다.
  • Window를 교체 할 때 응답으로 부품을 열면 새 창이 아닌 코드도 작동합니다.

모든 도움이 크게 감사하겠습니다!


피들러가 보여준대로 헤더를 요청한대로 :

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

마임 유형과 관련이 있어야합니다.

그래도 문제가 있습니다. http와 https 사이를 전환 할 때 IE가 표시되면이 코드는 해당 메시지를 두 번 제공합니다. 다음 코드는 전환되지 않지만 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());

다른 팁

원하는 방식으로 열기 위해 첨부 파일을 얻으면 보내는 헤더와 관련이 있습니다. 동적 PDF 리소스 역할을하려는 .aspx 페이지를 찾으면 이러한 HTTP 헤더가 점점 더 중요 해지고 있습니다.

이 웹 사이트 IE에서 작동하지 않을 수있는 여러 가지 이유가 있습니다.

  1. "Application/PDF"에 대한 응답의 내용 유형을 Ex. Response.SetContentType ( "응용 프로그램/PDF");
  2. URL 끝에 더미 매개 변수를 추가하십시오. http : // xyz/dogencompstmt? filename = dummy.pdf즉, 컨텐츠 유형을 무시하기 때문에 힌트를 주어야하며 ".pdf"확장은 쉬운 방법입니다.
  3. 응답에서 "컨텐츠 길이"를 설정하십시오. 그렇지 않으면 Acrobat Reader 플러그인이 제대로 작동하지 않을 수 있습니다. Response.setContentLength (bos.size ());
  4. 일부 브라우저를 돕는 추가적인 것은 다음과 같은 것입니다. response.setheader ( "content-disposition", "inline; filename = somepdf.pdf");

편집하다: 당신은 이미 위의 모든 것을 시도 했으므로 나는 당신을 콘텐츠 처분을위한 RFC 내가 아는 한 브라우저에 이진 컨텐츠를 처리하는 방법을 알려주는 유일한 방법입니다.

편집하다: 실제로 도움이되는 것은 브라우저에서 PDF를 열 때 현재 반환되는 HTTP 헤더를 보는 것입니다. 피들러는 트래픽을 잡는 데 큰 역할을합니다

Web-Page가 HTML 이외의 콘텐츠를 제공하도록 강요하려는 대신 이런 종류의 컨텐츠를 제공하기 위해 일반 핸들러 (.ASHX)를 사용하는 것이 좋습니다.

IE7 브라우저에서 PDF 인라인을 보려고 할 때 빈 페이지를 가져 오는 경우 Acrobat 버전 6을 사용하는 경우 Acrobat 버전을 업데이트하여 문제를 해결하십시오.

이 문제는 HTTP와 관련이 없으며 동일한 문제 (및 동일한 수정)가 HTTP에 적용됩니다.

IE의 문제는 PDF가 한 번에로드되면 스크립트로 열린 창에 PDF를 표시하지 않기 때문에 수정은 작동합니다. (알 수 없지만 이것이 문제의 핵심이자 수정입니다.)

반환 된 콘텐츠 유형이 호드임을 알 수 있습니다

"콘텐츠 유형 : 응용 프로그램/pdf; charset = utf-8"

컨텐츠를 ASPX 페이지로 스트리밍 할 때

Response.charset = ""
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top