2017-04-07 11 views
1

ActionScript를 사용하여 Adobe Flash Builder를 사용하여 데스크탑 응용 프로그램을 만듭니다. 웹 페이지에서 HTML 코드를 가져 와서 mx : html 요소에 넣은 다음 세로 스크롤 막대를 숨겨야하는지 여부를 결정하기 위해 내용 높이를 얻으려고 시도합니다. 그러나 contentHeight를 사용하면 방금 설정 한 것보다 이전 요소의 높이를 반환하는 것처럼 보입니다. actionscript 3 contentHeight가 올바르게 업데이트되지 않습니다.

는 HTML 페이지

var htmlPageRequest:URLRequest = new URLRequest(url); 
htmlPageRequest.method = URLRequestMethod.GET; //set request's html request method to GET 

htmlPageLoader.addEventListener(Event.COMPLETE, onHtmlLoaded); //listen for page load 
htmlPageLoader.load(htmlPageRequest);//when loaded continue logic in new function 

를 가져올 수있는 코드이 페이지 요청 (나는 당신이 URLLoader를 사용하고 있다고 가정하고

private function onHtmlLoaded(e:Event):void { //logic after html page has loaded 
      HtmlElement.data = htmlPageLoader.data; //set content 

      //determine if vscroll bar should be visible 
      if(HtmlElement.contentHeight > HtmlElement.height) { 
       scrollbar.visible = true; 
      } 
      else { 
       scrollbar.visible = false; 
      } 

      trace(HtmlElement.height); 
      trace(HTMLELEMENT.contentHeight); 
     } 

답변

3

: HTML을 렌더링

htmlElement.data = htmlPageLoader.data; 

는 시간이 걸립니다 - 페이지가 실제로 렌더링되기 전에 contentHeight 이전 값을 반환하는 원인에 액세스하고 있습니다. 이 문제를 해결하기 위해 렌더링이 완료 될 때까지 contentHeight에 액세스하지 않으려면 (htmlRender)에 대한 이벤트 리스너를 추가했습니다.

private function onHtmlLoaded(e:Event):void { //logic after html page has loaded 

     htmlElement.addEventListener(Event.HTML_RENDER, onHtmlRendered); //once the html has rendered, move on 
     htmlElement.data = htmlPageLoader.data; //render content     
     } 

     private function onHtmlRendered(e:Event):void { //logic for after the page has rendered 

      //if the content of the HTML element is bigger than the box, show the scrollbar 
      if(htmlElement.contentHeight > htmlElement.height) { 
       scrollbar.visible = true; 
      } 
      else { 
       scrollbar.visible = false; 
      } 
     } 
+1

이 답을 올바른 답으로 표시하면이 질문은 선행사에게 유용 할 것입니다. – Jeffin

1

완료되면 실행되는 기능입니다 htmlPageLoader) 인스턴스를 사용하여 웹 페이지를 mx:HTML 요소에로드합니다. 실제로 필요하지는 않습니다.

mx:HTML 구성 요소는 실제로 자체 웹 페이지를로드하는 내장 된 방법을 제공합니다. 이는 mx:HTML 클래스의 location 속성을 사용하여 수행 할 수 있습니다. 그것은로드하려는 웹 페이지의 URL 일 수있는 간단한 문자열을 기대합니다.

웹 페이지가로드되면 Event.COMPLETE 메서드가 실행되어 콘텐츠 높이를 올바르게 가져올 수 있어야합니다. 그럼 다음 코드를 시도하십시오 :

htmlElement.addEventListener(Event.COMPLETE, onHtmlLoaded); 
htmlElement.location = "your URL goes here"; 

private function onHtmlLoaded(e:Event):void 
{ 
    htmlElement.removeEventListener(Event.COMPLETE, onHtmlLoaded); 
    trace(htmlElement.contentHeight); 
} 

위의 몇 가지 URL을 시도해 봤는데 잘 작동하는 것 같습니다. 또한 나는 htmlElement에 대한 낙타 사례 명명 규칙을 자유롭게 사용했습니다. 그것은 단지 최선의 방법입니다.

희망이 도움이됩니다. 건배.

나는이 문제에 대한 해결책을 실현
+0

새 HTML을 다운로드하기 전에 이전 컨텐츠를 디 - 렌더링하지 않으려는 이유로 inbuilt 메소드를 사용하지 않은 이유는 다음과 같습니다. 당신 말이 맞아요, 나는 그것에 대한 URLLoader를 사용하고 있습니다 (나는 그것을 잊어 버렸습니다). 낙타의 경우에 대한 사과 -이 문맥에서 의미가있는 것으로 이름을 바꿀 때 필자는 찾기/바꾸기에 오타를 만들었습니다. – darthmorf

+0

@darthmorf 이해합니다. 나는 아래에서 당신의 답을 보았고 당신이 그것을 풀 수 있었기 때문에 기쁩니다. 감사. –