Mobil uygulamalarda HTML içeriğini görüntülemeAdobe AIR AIR 2.5 ve üstü StageWebView sınıfı HTML içeriğini mobil aygıtlarda sistem tarayıcısı kontrolünü ve masaüstü bilgisayarlarda standart Adobe® AIR® HTMLLoader kontrolünü kullanarak görüntüler. Sınıfın geçerli aygıtta desteklenip desteklenmediğini belirlemek için StageWebView.isSupported özelliğini kontrol edin. Mobil profilinde tüm aygıtlar için destek garantilenmez. Tüm profillerde, StageWebView sınıfı HTML içeriği ve uygulamanın geri kalanı arasındaki etkileşimlerin sınırlı bir kısmını destekler. Gezinmeyi kontrol edebilirsiniz ancak çapraz komut dosyasına veya doğrudan veri alış verişine izin verilmez. Yerel veya uzak bir URL'den içerik yükleyebilir ya da bir HTML dizesi sunabilirsiniz. StageWebView nesneleriBir StageWebView nesnesi ekran nesnesi değildir ve görüntüleme listesine eklenemez. Bunun yerine, doğrudan sahne alanına bağlı bir görüntü kapısı olarak işlev görür. StageWebView içeriği çizim işlemini görüntüleme listesi içeriğinin üzerinde gerçekleştirir. Birden fazla StageWebView nesnesinin çizim sırasını kontrol etmenin bir yolu yoktur. Bir StageWebView nesnesini görüntülemek için, nesnenin StageWebView nesnesinin stage özelliğine görüneceği sahne alanını atarsınız. viewPort özelliğini kullanarak ekranın boyutunu ayarlayın. viewPort özelliğinin x ve y koordinatlarını -8192 ve 8191 arasında ayarlayın. Sahne alanı genişliği ve yüksekliğinin maksimum değeri 8191'dir. Boyut maksimum değerleri aşarsa bir istisna atılır. Aşağıdaki örnek bir StageWebView nesnesi oluşturur, stage ve viewPort özelliklerini ayarlar ve bir HTML dizesi görüntüler: var webView:StageWebView = new StageWebView(); webView.viewPort = new Rectangle( 0, 0, this.stage.stageWidth, this .stage.stageHeight); webView.stage = this.stage; var htmlString:String = "<!DOCTYPE HTML>" + "<html><body>" + "<p>King Philip could order five good steaks.</p>" + "</body></html>"; webView.loadString( htmlString ); Bir StageWebView nesnesini gizlemek için stage özelliğini null olarak ayarlayın. Nesneyi tamamen yok etmek için dispose() yöntemini çağırın. dispose() yöntemini çağırmak isteğe bağlıdır ancak çöp toplayıcısının nesne tarafından kullanılan belleği daha çabuk geri kazanmasına yardımcı olur. İçerikİçeriği bir StageWebView nesnesine iki yöntem kullanarak yükleyebilirsiniz: loadURL() ve loadString(). loadURL() yöntemi belirtilen URL'de bir kaynak yükler. Şunlarda dahil olmak üzere sistem web tarayıcısı kontrolü tarafından desteklenen herhangi bir URI şemasını kullanabilirsiniz: data:, file:, http:, https: ve javascript:. app: ve app-storage: şemaları desteklenmez. AIR URL dizesini doğrulamaz. loadString() yöntemi HTML içeriğine sahip değişmez bir dize yükler. Bu yöntemle yüklenen bir sayfanın konumu şu şekilde ifade edilir:
Gömülü içerik veya veri yükleme kurallarını URI şeması belirler.
Not: Sahne alanının displayState özelliği FULL_SCREEN olarak ayarlanırsa Masaüstünde StageWebView öğesinde görüntülenen bir metin alanına yazamazsınız. Ancak, iOS ve Android'de sahne alanının displayState öğesi FULL_SCREEN olsa bile StageWebView öğesinde metin alanına yazabilirsiniz.
Aşağıdaki örnek Adobe'nin web sitesini görüntülemek için bir StageWebView nesnesi kullanır: package { import flash.display.MovieClip; import flash.media.StageWebView; import flash.geom.Rectangle; public class StageWebViewExample extends MovieClip{ var webView:StageWebView = new StageWebView(); public function StageWebViewExample() { webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); webView.loadURL( "http://www.adobe.com" ); } } } Android aygıtlarında, uygulamanın uzak kaynakları başarıyla yüklemesini sağlamak için Android INTERNET iznini belirtmeniz gerekir. JavaScript URI'siStageWebView nesnesi tarafından yüklenen HTML sayfasında tanımlanan bir işlevi çağırmak için bir JavaScript URI'si kullanabilirsiniz. JavaScript URI'yi kullanarak çağırdığınız işlev yüklü web sayfasının bağlamında çalışır. Aşağıdaki örnek bir JavaScript işlevini çağırmak için StageWebView nesnesi kullanır: package { import flash.display.*; import flash.geom.Rectangle; import flash.media.StageWebView; public class WebView extends Sprite { public var webView:StageWebView = new StageWebView(); public function WebView() { var htmlString:String = "<!DOCTYPE HTML>" + "<html><script type=text/javascript>" + "function callURI(){" + "alert(\"You clicked me!!\");"+ "}</script><body>" + "<p><a href=javascript:callURI()>Click Me</a></p>" + "</body></html>"; webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); webView.loadString( htmlString ); } } } Gezinme olaylarıBir kullanıcı HTML'de bir bağlantıyı tıklattığında, StageWebView nesnesi bir locationChanging olayı gönderir. Gezinmeyi durdurmak için olay nesnesinin preventDefault() yöntemini çağırabilirsiniz. Aksi takdirde, StageWebView nesnesi yeni sayfaya gider ve bir locationChange olayı gönderir. Sayfanın yüklenmesi tamamlandığında, StageWebView bir complete olayı gönderir. Her HTML yeniden yönlendirmesinde bir locationChanging olayı gönderilir. locationChange ve complete olayları uygun zamanda gönderilir. iOS'da ilk loadURL() veya loadString() yöntemleri dışında bir locationChange olayından önce locationChanging olayı gönderilir. iFrames ve Frames aracılığıyla gezinme değişiklikleri için de bir locationChange olayı gönderilir. Aşağıdaki örnek bir konum değişikliğini nasıl önleyebileceğinizi ve bunun yerine yeni sayfayı sistem tarayıcısında nasıl açacağınızı gösterir. package { import flash.display.MovieClip; import flash.media.StageWebView; import flash.events.LocationChangeEvent; import flash.geom.Rectangle; import flash.net.navigateToURL; import flash.net.URLRequest; public class StageWebViewNavEvents extends MovieClip{ var webView:StageWebView = new StageWebView(); public function StageWebViewNavEvents() { webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); webView.addEventListener( LocationChangeEvent.LOCATION_CHANGING, onLocationChanging ); webView.loadURL( "http://www.adobe.com" ); } private function onLocationChanging( event:LocationChangeEvent ):void { event.preventDefault(); navigateToURL( new URLRequest( event.location ) ); } } } GeçmişKullanıcı StageWebView nesnesinde görüntülenen içerikte bağlantıları tıklatırken kontrol geriye doğru ve ileri doğru geçmiş yığınlarını kaydeder. Aşağıdaki örnek iki geçmiş yığını arasında nasıl gezileceğini gösterir. Örnek Geri ve Ara yazılım tuşlarını kullanır. package { import flash.display.MovieClip; import flash.media.StageWebView; import flash.geom.Rectangle; import flash.events.KeyboardEvent; import flash.ui.Keyboard; public class StageWebViewExample extends MovieClip{ var webView:StageWebView = new StageWebView(); public function StageWebViewExample() { webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); webView.loadURL( "http://www.adobe.com" ); stage.addEventListener( KeyboardEvent.KEY_DOWN, onKey ); } private function onKey( event:KeyboardEvent ):void { if( event.keyCode == Keyboard.BACK && webView.isHistoryBackEnabled ) { trace("back"); webView.historyBack(); event.preventDefault(); } if( event.keyCode == Keyboard.SEARCH && webView.isHistoryForwardEnabled ) { trace("forward"); webView.historyForward(); } } } } OdakGörüntüleme nesnesi olmasa da, StageWebView sınıfı denetime giren ve denetimden çıkan odak geçişlerini yönetmenize izin veren üyeler içerir. StageWebView nesnesi odak kazandığında bir focusIn olayı gönderir. Bu olayı gerekirse uygulamanızdaki odak öğelerini yönetmek için kullanabilirsiniz. StageWebView nesnesi odağı bıraktığında bir focusOut olayı gönderir. Bir StageWebView örneği kullanıcı web sayfasındaki ilk veya son kontrolü aygıt izleme topu veya yön okları kullanarak sekme tuşu ile geçtiğinde odağı bırakabilir. Olay nesnesinin direction özelliği odak akışının sayfanın üstünden geçerek arttığını mı yoksa sayfanın altından geçerek azaldığını mı bildirir. Bu bilgileri odağı StageWebView nesnesinin üstünde veya altında uygun görüntüleme nesnesine atamak için kullanın. iOS'ta odak programlı olarak ayarlanamaz. StageWebView FocusEvent öğesinin yön özelliği none olarak ayarlıyken focusIn ve focusOut olaylarını gönderir. Kullanıcı StageWebView öğesinin içine dokunursa focusIn olayı gönderilir. Kullanıcı StageWebView öğesinin dışına dokunursa focusOut olayı gönderilir. Aşağıdaki örnek odağın StageWebView nesnesinden Flash görüntülüme nesnelerine nasıl geçtiğini gösterir: package { import flash.display.MovieClip; import flash.media.StageWebView; import flash.geom.Rectangle; import flash.events.KeyboardEvent; import flash.ui.Keyboard; import flash.text.TextField; import flash.text.TextFieldType; import flash.events.FocusEvent; import flash.display.FocusDirection; import flash.events.LocationChangeEvent; public class StageWebViewFocusEvents extends MovieClip{ var webView:StageWebView = new StageWebView(); var topControl:TextField = new TextField(); var bottomControl:TextField = new TextField(); public function StageWebViewFocusEvents() { trace("Starting"); topControl.type = TextFieldType.INPUT; addChild( topControl ); topControl.height = 60; topControl.width = stage.stageWidth; topControl.background = true; topControl.text = "One control on top."; topControl.addEventListener( FocusEvent.FOCUS_IN, flashFocusIn ); topControl.addEventListener( FocusEvent.FOCUS_OUT, flashFocusOut ); webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 60, stage.stageWidth, stage.stageHeight - 120 ); webView.addEventListener( FocusEvent.FOCUS_IN, webFocusIn ); webView.addEventListener(FocusEvent.FOCUS_OUT, webFocusOut ); webView.addEventListener(LocationChangeEvent.LOCATION_CHANGING, function( event:LocationChangeEvent ):void { event.preventDefault(); } ); webView.loadString("<form action='#'><input/><input/><input/></form>"); webView.assignFocus(); bottomControl.type = TextFieldType.INPUT; addChild( bottomControl ); bottomControl.y = stage.stageHeight - 60; bottomControl.height = 60; bottomControl.width = stage.stageWidth; bottomControl.background = true; bottomControl.text = "One control on the bottom."; bottomControl.addEventListener( FocusEvent.FOCUS_IN, flashFocusIn ); bottomControl.addEventListener( FocusEvent.FOCUS_OUT, flashFocusOut ); } private function webFocusIn( event:FocusEvent ):void { trace("Web focus in"); } private function webFocusOut( event:FocusEvent ):void { trace("Web focus out: " + event.direction); if( event.direction == FocusDirection.TOP ) { stage.focus = topControl; } else { stage.focus = bottomControl; } } private function flashFocusIn( event:FocusEvent ):void { trace("Flash focus in"); var textfield:TextField = event.target as TextField; textfield.backgroundColor = 0xff5566; } private function flashFocusOut( event:FocusEvent ):void { trace("Flash focus out"); var textfield:TextField = event.target as TextField; textfield.backgroundColor = 0xffffff; } } } Bitmap yakalamaBir StageWebView nesnesi tüm görüntüleme listesi içeriğinin üstünde oluşturulur. Bir StageWebView nesnesinin üstüne içerik ekleyemezsiniz. Örneğin, bir açılır listeyi StageWebView içeriğinin üzerine genişletemezsiniz. Bu sorunu çözmek için StageWebView öğesinin anlık görüntüsünü alın. Ardından, StageWebView öğesini gizleyin ve bunun yerine bitmap anlık görüntüyü ekleyin. Aşağıdaki örnek drawViewPortToBitmapData yöntemini kullanarak bir StageWebView nesnesinin anlık görüntüsünün nasıl alınacağını gösterir. Sahne alanını null olarak ayarlayarak StageWebView nesnesini gizler. Web sayfası tamamen yüklendikten sonra bitmap'i yakalayan ve görüntüleyen bir işlev çağırır. Çalıştırdığınızda kod iki etiket gösterir: Google ve Facebook. Etiketi tıklatmak karşılık gelen web sayfasını yakalar ve bunu sahne alanında anlık görüntü olarak gösterir. 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.facebook.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); } } } |
|