如果你想对StageWebView捕获位图,可以参考如下例子,代码参考自:
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="Google"; textGoogle.x=300; textGoogle.y=-80; addChild(textGoogle); textFacebook.htmlText="Facebook"; 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); }