Actionscript 3 actionscript 3内容高度未正确更新

Actionscript 3 actionscript 3内容高度未正确更新,actionscript-3,actionscript,flash-builder4.5,Actionscript 3,Actionscript,Flash Builder4.5,我正在使用AdobeFlashBuilder和actionscript制作一个桌面应用程序。 我从网页中获取一些html代码,并将其放入mx:html元素中,然后尝试获取内容高度,以确定是否应该隐藏垂直滚动条。但是,当使用contentHeight时,它似乎返回元素先前状态的高度,而不是刚刚设置的高度 这是获取html页面的代码 var htmlPageRequest:URLRequest = new URLRequest(url); htmlPageRequest.method = URLR

我正在使用AdobeFlashBuilder和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);
        }

我假设您在这里使用
urloader
htmlPageLoader
)实例将网页加载到
mx:HTML
元素中,这可能不是实际需要的

mx:HTML
组件实际上提供了一种内置方式来将网页加载到自身中。这可以使用
mx:HTML
类的
location
属性来完成。它需要一个简单的字符串,可以是您试图加载的网页的URL

加载网页后,将触发
事件.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
自由地使用了驼峰大小写命名约定。这只是最佳实践


希望这有帮助。干杯。

我假设您在这里使用
urloader
htmlPageLoader
)实例将网页加载到
mx:HTML
元素中,这可能不是实际需要的

mx:HTML
组件实际上提供了一种内置方式来将网页加载到自身中。这可以使用
mx:HTML
类的
location
属性来完成。它需要一个简单的字符串,可以是您试图加载的网页的URL

加载网页后,将触发
事件.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
自由地使用了驼峰大小写命名约定。这只是最佳实践


希望这有帮助。干杯。

我已经意识到问题的解决方案:

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;
            }
        }

我已经意识到问题的解决方案:

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;
            }
        }

我之所以没有使用内置方法,是因为我不希望在下载新的HTML之前对以前的内容进行反呈现。你是对的,我正在使用URLLoader(我忘了包括它)。我对骆驼事件表示歉意-我在重命名为在这种情况下有意义的东西时,在“查找/替换”中输入了一个错误。@darthmorf我理解。我已经看到了你下面的答案,很高兴你能解决它。谢谢。我之所以没有使用内置方法,是因为我不想在下载新的HTML之前将以前的内容反呈现。你是对的,我正在使用URLLoader(我忘了包括它)。我对骆驼事件表示歉意-我在重命名为在这种情况下有意义的东西时,在“查找/替换”中输入了一个错误。@darthmorf我理解。我已经看到了你下面的答案,很高兴你能解决它。谢谢。将此标记为正确答案,这样此问题将被视为对先例有用。将此标记为正确答案,这样此问题将被视为对先例有用。