对StageWebView捕获位图时空白

如果你想对StageWebView捕获位图,可以参考如下例子,代码参考自:http://help.adobe.com/en_US/as3/dev/WS901d38e593cd1bac3ef1d28412ac57b094b-8000.html

package 
{ 
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.Sprite; 
    import flash.events.*; 
    import flash.geom.Rectangle; 
    import flash.media.StageWebView; 
    import flash.net.*; 
    import flash.text.TextField; 
    public class stagewebview extends Sprite 
    { 
        public var webView:StageWebView=new StageWebView(); 
        public var textGoogle:TextField=new TextField(); 
        public var textFacebook:TextField=new TextField(); 
        public function stagewebview() 
        { 
            textGoogle.htmlText="<b>Google</b>"; 
            textGoogle.x=300; 
            textGoogle.y=-80;         
            addChild(textGoogle); 
            textFacebook.htmlText="<b>Facebook</b>"; 
            textFacebook.x=0; 
            textFacebook.y=-80; 
            addChild(textFacebook); 
            textGoogle.addEventListener(MouseEvent.CLICK,goGoogle); 
            textFacebook.addEventListener(MouseEvent.CLICK,goFaceBook); 
            webView.stage = this.stage; 
            webView.viewPort = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight); 
        } 
    public function goGoogle(e:Event):void 
        { 
            webView.loadURL("http://www.google.com"); 
            webView.stage = null; 
            webView.addEventListener(Event.COMPLETE,handleLoad); 
        } 
     
    public function goFaceBook(e:Event):void 
        { 
            webView.loadURL("http://www.baidu.com"); 
            webView.stage = null; 
            webView.addEventListener(Event.COMPLETE,handleLoad); 
        } 
    public function handleLoad(e:Event):void 
        { 
            var bitmapData:BitmapData = new BitmapData(webView.viewPort.width, webView.viewPort.height); 
            webView.drawViewPortToBitmapData(bitmapData); 
            var webViewBitmap:Bitmap=new Bitmap(bitmapData); 
            addChild(webViewBitmap); 
        } 
    } 
}

 

 使用上述代码是可以实现捕获位图功能的。但如果想不用点击就直接初始化页面的,可以稍微修改如下。 

......
webView.stage = this.stage; webView.viewPort = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight); //直接加载页面 webView.loadURL("http://www.baidu.com"); webView.stage = null;
......

 但修改后会出现文章标题所说的“捕获位图时空白”。至于为什么会出现这种情况,暂不清楚。我估计是StageWebView加载页面完成发送COMPLETE事件后,其实页面并未加载完成而导致捕获位图空白,因此采取延迟策略。这是无奈的解决方案,如果你遇到过这个问题并有更好的解决方案,请告诉我。

public function handleLoad(e:Event):void 
{ 
   setTimeout(delayHandler,100);
} 
        
private function delayHandler():void
{
   var bitmapData:BitmapData = new BitmapData(webView.viewPort.width, webView.viewPort.height); 
   webView.drawViewPortToBitmapData(bitmapData); 
   var webViewBitmap:Bitmap=new Bitmap(bitmapData); 
   addChild(webViewBitmap); 
}

 

 

posted @ 2013-05-29 18:56  FlashHK  阅读(426)  评论(0编辑  收藏  举报