我正在使用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);
}
答案 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)
我假设您在此处使用URLLoader
(htmlPageLoader
)实例将网页加载到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
的驼峰案例命名约定。这只是最好的做法。
希望这会有所帮助。欢呼声。