2010-07-30 4 views
0

나는 C# 코드에서 클라이언트 이벤트 처리자 onclick을 추가하고 있습니다. 그것은해야한다 : 그 매개 변수를 처리하는 기본 영문 페이지가 내 사이트의 보고서 폴더에자바 스크립트를 사용하여 새 https 브라우저 창 열기

https://servername/reports/?type=1&id=2 

:처럼 결국

Button1.Attributes.Add("onclick", "javascript:window.open('https://"+Request.ServerVariables["HTTP_POST"]+"/reports/?type=1&id=2"); 

는 URL 보인다.

이 이벤트와 함께 버튼을 클릭하면 새 창이 열리지 만 해당 주소에는 페이지가 없다고 표시됩니다. 이 링크를 사용하면

https://servername/reports/default.aspx?type=1&id=2 

페이지가 열리지 만 비어 있습니다.

HTTP로 보안되지 않은 상태로이 코드를 실행하면 모든 것이 정상적으로 작동합니다. 보고서가 열립니다.

default.aspx와 함께 두 개의 서로 다른 URL을 사용하면 개발 과정에서 같은 방식으로 작동하지만 HTTPS에서는 한 페이지가 존재하지 않고 다른 페이지가 비어 있기 때문에 차이가 있습니까? HTTPS가 그 이유입니까 ??

감사합니다.

+0

이것은 아마도'window.open'과 아무 관련이 없습니다. 이러한 URL 중 하나를 직접 입력하면 어떻게됩니까? –

+0

코드에서와 같은 것. 편도 표시가 없으므로 다른 방법은 없습니다. 다른 URL을 입력하면 해당 페이지가 열리지 만이 두 페이지는 열리지 않습니다. 프로덕션 환경에서 디버깅을 사용하여 로그 파일에 문제가 발생했음을 알 수 없지만이 오류가 발생합니다. 나는 혼란 스럽습니다. URL 자체에 뭔가가 있거나 https? – 100r

답변

0

해결책을 찾았습니다. 그리고 저는 WOOW를 제외하고는 말할 것도 없습니다! 그것은 ssl 또는 IIS 또는 경로와 관련이 없으며 Windows temp 폴더의 퍼미션과 함께 있으며 크리스탈 보고서는 임시 파일을 저장할 수 없습니다.

희망이 있으면 도움이 될 것입니다.

-1
  • JavaScript는 문자열 리터럴의 변수 이름을 보간하지 않습니다. 문자 그대로 서버 이름 Request.ServerVariables["HTTP_POST"]을 사용하고 있으며 실제 서버 이름이 아니거나 URL에서 유효하기 때문에 열리지 않습니다.

  • JavaScript는 클라이언트 측 언어이므로 Request.ServerVariables에 액세스 할 수 없습니다. ASP에서 클라이언트 문서로 변수를 출력하려면 템플릿을 사용해야하고, JavaScript 문자열 리터럴에 뭔가를 넣으려면 일반적으로 JSON 인코딩을 사용하여 '\ 개의 문자 (및 몇 가지 다른 문자)를 중지해야합니다. 문자열을 깨는 텍스트 HTML 이벤트 핸들러 속성 안에 JavaString 문자열 리터럴 으로 출력하는 경우 문자열을 JSON 인코딩 한 다음 나중에 HTML 인코딩해야합니다. 컨텐트를 이벤트 핸들러에 넣는 것과 관련된 도피의 레이어는 성가 시며 오류가 발생하기 쉽습니다. 이벤트 핸들러 속성을 사용하지 마십시오.

  • 아마도 HTTP_HOST이 아니고 POST이 아닙니다.

  • 이벤트 처리기에는 javascript:이 필요하지 않습니다. 그것은 아무 것도하지 않습니다. 링크에있는 javascript: 개의 가상 URL을 생각하고 있지만이 중 하나를 사용해서는 안됩니다. 일반 링크에 실제 URL을 넣으면 JavaScript가 작동하지 않고 중간 클릭과 같은 옵션으로 중단되지 않으며 JS를 사용하여 링크를 보강하여 정상적으로 클릭하면 새 창이 열립니다.

    <a class="newwindow" href="https://<%= Server.HTMLEncode(Request.ServerVariables["HTTP_POST"]) %>/reports/?type=1&amp;id=2"> 
    
    <!-- at end of document --> 
    <script type="text/javascript"> 
        for (var i= document.links.length; i-->0;) 
         if (document.links[i].className==='newwindow') 
          document.links[i].onclick= newWindowClick; 
    
        function newWindowClick() { 
         var w= window.open(this.href); 
         return !w || w.closed; 
         // stops link being followed in the current page (return false) 
         // unless pop-up was blocked 
        } 
    </script> 
    

    은 (ASP.NET 4에서, 당신은 Server.HTMLEncode 아무것도 할 필요를 피하기 위해 <%: 대신 <%=을 사용할 수 있습니다 :

은 '점진적 개선'으로 알려져있다.호스트 이름에는 HTML 특수 문자가 없을 것입니다. HTML 인코딩에 익숙해지는 것이 좋습니다. 더 중요한 것은 어디에도 놓치지 않고 잠재적으로 XSS 보안으로 이어지는 HTML 삽입을 갖기 때문입니다. 구멍).

그러나 이것은 일반적으로 오래된 방법으로 간주됩니다; ASP.NET HTML 컨트롤이 선호되는 경우가 많습니다. 모든 JS 복잡성 대신 단순히 target="_blank" 속성을 사용하는 것도 고려해야합니다. (이것은 HTML 4에서 엄격한 유효하지 않은 반면, 그것은 다시 HTML5에서하고 좀 더 유지 보수입니다.) 마지막으로

<asp:HyperLink id="thelink" Target="_blank" Text="some link text"/> 

// VBS in Page_Load: 
thelink.NavigateUrl= "https://" & Request.ServerVariables["HTTP_POST"] & "/reports/?type=1&id=2"; 

, 당신은 또한 확실히 모든 팝업을 가지고 있지 고려해야합니다. 많은 사용자는 적대적이라고 생각합니다 (새 창에서 원한다면 '새 창에서 열기'를 클릭합니다). 일부 브라우저에서는 더 이상 새 창 대신 새 탭으로 열어 둡니다. 아마도 원하지 않을 것입니다.

+0

미안하지만 가장 중요한 것은 입력하지 않았습니다. 질문 상단을 다시 확인하십시오. 이벤트 핸들러는 html이 아닌 코드에서 추가됩니다. 테스트 환경에서 http로 다시 작동합니다. Http는 생산에 문제가 있습니다. 이것은 매우 강조됩니다! 월요일이 오늘 작동하지 않습니다 : ( 그리고이 긴 대답을 주셔서 감사합니다.하지만 여기서는 답변을 찾을 수 없습니다. – 100r

+0

나는 Button1.Attributes.Add를 확인합니다. – 100r

+0

이것이 실제 코드라면 지금 : 속성 값의 끝에'')가 없습니다. 그러나 이것은 왜 당신이 그것을 이렇게해서는 안되며, 혼란스럽고, 벗어나는 문제에 취약하며, 읽기가 어렵다는 것을 보여줍니다. JS를 정적 코드로 뽑아 내 URL을 정상 링크에 남겨 둡니다. 원하는 경우 단추처럼 스타일을 지정할 수 있습니다. (그리고 절대로'javascript :'를 사용하지 마십시오.) – bobince

0

스크립트에 return = false를 추가 할 수도 있습니다.

String s= "window.open('" + Request.Url.AbsoluteUri.Replace("http", "https") + "');return false;"; 
    ButtonTest.Attributes.Add("onclick", s); 
+0

결국 javascript 나 https와는 아무런 관련이 없습니다 .Wierd가 진행되고 있습니다. 서버가 실행되는 서버와 그렇지 않은 서버에있는 페이지 Crystal Reports 뷰어가있는 페이지 CR에서 두 시스템 모두 동일한 방식으로 설치되며 CR이 작동하는 또 다른보고 페이지가 있습니다. 이것은 더 이상 질문이 아닙니다. 누군가가 도울 수 있을지 의심 스럽습니다. 이것은 IIS가 보이지 않거나 모르겠다는 것입니다. 아시다시피, 나는 내 마음을 잃고 있습니다. 어쨌든 Tnx! – 100r

관련 문제