2017-04-07 67 views
1

我正在使用Adobe Flash Builder和actionscript製作桌面應用程序。 我從網頁獲取一些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 

代碼這是頁面請求完成

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

我已經意識到了問題的解決方法:

htmlElement.data = htmlPageLoader.data; 

渲染HTML需要花費一定的時間 - 被訪問,則contentHeight之前的頁面實際上已經呈現,從而導致要返回的前值。 爲了解決這個問題,我添加了一個(htmlRender)事件監聽器,以便在渲染完成之前不訪問contentHeight。

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

我假設你使用的是URLLoader(時運行的功能htmlPageLoader)instance將網頁加載到mx:HTML元素中,但實際上可能並不需要。

mx:HTML組件實際上提供了一種內置的方式來將網頁加載到自身中。這可以使用mx:HTML類的location屬性完成。它期望一個簡單的字符串,它可能是您嘗試加載的網頁的網址。

加載網頁後,會觸發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之前解除先前的內容。你是對的,我正在使用一個URLLoader(我忘了包括它)。我對駱駝事件表示歉意 - 在重新命名某些在這種情況下有意義的事情時,我在查找/替換中輸入了一個錯字。 – darthmorf

+0

@darthmorf我明白了。我已經在下面看到了你的答案,很高興你能解決它。謝謝。 –