2011-10-29 2 views
0

HTA에서 실행되는 기존 응용 프로그램이 있습니다. 나는 file://으로 시작하여 사용자를 즉시 ​​웹 URL location.href="http://server/path"으로 리디렉션합니다. HTTP 응답을 얻을 수있는 URL로후속 탐색이 성공할 지 여부를 감지하는 방법

  • XHR :

    탐색이 성공 여부 (또는 성공할 경우 감지 할 수있는 방법)

    아이디어를하면 감지 할 수있는 방법이 있습니까 url로 이동하기 전에 코드를 작성하십시오. (사이트가 동일하지 않기 때문에 사용 권한 문제가 발생합니다 : file : // -> http : //)

  • SCRIPT URL은 알려진 경로에 대한 요소입니다.
  • 액세스 URL은 FRAME입니다. 결과 페이지 또는 HTA에서 성공하면 부모를 다시로드하십시오.

참고 :

URL은 애플리케이션 서버에서 호스팅되는 동적 페이지 (서블릿)입니다. 정적 컨텐츠 (이미지 등)는 다르게 호스팅됩니다. 이미지를 확인함으로써 실제 URL이 작동한다는 것을 보장하지는 않습니다. 이 차이점을 반영하도록 해주십시오. (감사합니다!)

+0

URL에 XHR은 콘텐츠와 200 OK를 얻을 것입니다. 아마도 GET/POST 대신 HEAD를하고 싶을 것입니다. – mplungjan

+0

@mplungjan XHR은 동일한 프로토콜 및 서버 내에 있지 않으므로 권한 예외가 있습니다. : – TJR

+0

HTA가 도메인 전체에 액세스 허용해야 함 – mplungjan

답변

0

CALLING 페이지는 내비게이션 성공 또는 실패 여부를 직접 알 수 없습니다.여러 가지 방법을 사용하여 발생 가능성을 높일 수 있지만 궁극적으로 성공 또는 실패 할 수 있습니다.

+0

iframe에 URL을로드하지 않는 이유는 무엇입니까? – gilly3

+0

@ gilly3, 그것은 응용 프로그램의 크기를 조정할 때 일부 가정을 변경합니다. – TJR

0

서버에서 이미지를로드하고 onloadonerror 이벤트를 수신합니다. 이미지는 단지 1 픽셀 투명한 gif 일 수 있습니다.

<img src="http://server/transparent.gif" onload="setServerAvailable(true);" onerror="setServerAvailable(false);" /> 

편집 : 당신은 iframe에 페이지를로드 할 수 있습니다. 자바 스크립트를 통해 페이지 상태를 모니터링 할 수 있습니다. HTA로 작업 할 때 동일한 출처 정책에 대해 걱정할 필요가 없습니다. 이 코드를 HTA로 저장 한 다음 HTA를로드하고 버튼을 클릭합니다. 대상 웹 페이지에 액세스 할 수있는 경우에 웹 페이지에서 핑 (onload)를 배치

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8" /> 
     <title>Test Same Origin Policy in HTA</title> 
     <script type="text/javascript"> 
      function modifyFrame() 
      { 
       var fr = document.body.getElementsByTagName("iframe")[0]; 
       fr.contentWindow.document.body.innerHTML = 
        "Cross domain scripting works in HTA"; 
      } 
     </script> 
    </head> 
    <body> 
     <iframe src = "http://stackoverflow.com/questions/7940913/"></iframe> 
     <br /><br /> 
     <button onclick="modifyFrame()">Modify cross-domain frame content</button> 
    </body> 
</html> 
+0

이렇게하면 서버에 대한 액세스가 보장되지만 웹 페이지의 실제 성공적인 탐색에 대한 주요 문제는 해결되지 않습니다 .. – Alex

+0

@ gilly3 나는 내가 탐색 할 URL에 대해 우려하고 있습니다. 리디렉션이 실패하면 앱에서 창을 제어 할 수 없으므로 사용자가 망가져 버린다. – TJR

+0

그런 다음 iframe에 페이지를 호스팅하면됩니다. 동일한 도메인 정책이 HTAs에는 적용되지 않습니다. – gilly3

0

: 당신은 당신이 다른 도메인에있는 경우에도 프레임 내용을 수정할 수있는 것을 확인할 수 있습니다 호출자 서버는 성공적인로드를 등록합니다.

기술의 선택에 따라 웹 페이지의 ping은 중앙 저장소 (예 : 데이터베이스)에 성공적인로드를 등록하는 서버의 웹 서비스에 대한 간단한 호출 일 수 있습니다. 귀하의 HTA는 정기적으로 데이터베이스 로딩 상태를 확인하고 그에 따라 행동 할 수 있습니다. 당신이 필요로 요약

은 다음과 같습니다

  1. 웹 서비스가 페이지 요청에 대한 '로드 상태를'등록. 로딩 상태를 중앙 데이터베이스에 저장하십시오.
  2. 로딩 웹 페이지에서 페이지가 완전히로드 된 후이 웹 서비스를 호출하십시오. 오류시 마찬가지로 상태를 설정하십시오.
  3. HTA에서 로딩 상태를 확인하고 표시하는 타이머를 만듭니다. 그리고 최종 상태에 따라 행동합니다.
+1

감사합니다. – TJR

+0

I 내 제안 된 대답을 정교하게 만들었습니다. 제 아이디어를 얻기를 바랍니다.이 솔루션은 다소 복잡하지만 HTA와 웹 페이지가 다른 보안 범위에 있으므로 저장소를 통해 통신해야합니다. 적어도 내가 보는 방법입니다. ..)) – Alex

+0

일단 location.href를 설정하면 내비게이션을 방지 할 수있는 방법이 없습니다. beforeunload). 그러면이 방법이 어떻게 도움이 될까요? 이 "ping-back"페이지가 어떻게로드됩니까? (XHR, 스크립트 태그는 작동하지 않을 것입니다.) – TJR