actionscript 3 contentHeight未正确更新

时间:2017-04-07 13:38:16

标签: actionscript-3 actionscript flash-builder4.5

我正在使用Adobe Flash Builder和actionscript来制作桌面应用程序。 我从网页获取一些HTML代码并将其放入mx:html元素,然后尝试获取内容高度以确定是否应该隐藏垂直滚动条。但是,当使用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);
        }

2 个答案:

答案 0 :(得分: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 :(得分:1)

我假设您在此处使用URLLoaderhtmlPageLoader)实例将网页加载到mx:HTML元素中,这可能实际上并不需要。

mx:HTML组件实际上提供了一种内置方式来将网页加载到自身中。这可以使用location类的mx:HTML属性来完成。它需要一个简单的字符串,它可能是您尝试加载的网页的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);
}

我已经尝试了上面几个网址,但似乎工作正常。此外,我冒昧地使用htmlElement的驼峰案例命名约定。这只是最好的做法。

希望这会有所帮助。欢呼声。