2017-04-07 22 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我明白了。我已经在下面看到了你的答案,很高兴你能解决它。谢谢。 –