Paket | flash.external |
Sınıf | public final class ExternalInterface |
Miras Alma | ExternalInterface Object |
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
ExternalInterface sınıfını kullanarak, HTML sayfasında JavaScript'i kullanıp Flash çalışma zamanında bir ActionScript işlevini çağırabilirsiniz. ActionScript işlevi, bir değer döndürebilir ve JavaScript derhal bu değeri çağrının dönüş değeri olarak alır.
Bu işlev, fscommand()
yönteminin yerini alır.
ExternalInterface sınıfını şu tarayıcı-işletim sistemi kombinasyonlarında kullanın:
Tarayıcı | İşletim Sistemi | İşletim Sistemi |
---|---|---|
Internet Explorer 5.0 ve sonrası | Windows | |
Netscape 8.0 ve sonrası | Windows | MacOS |
Mozilla 1.7.5 ve sonrası | Windows | MacOS |
Firefox 1.0 ve sonrası | Windows | MacOS |
Safari 1.3 ve sonrası | MacOS |
Linux sürüm 9.0.31.0 ve sonrası için Flash Player, şu tarayıcılarda ExternalInterface sınıfını destekler:
Tarayıcı |
---|
Mozilla 1.7.x ve sonrası |
Firefox 1.5.0.7 ve sonrası |
SeaMonkey 1.0.5 ve sonrası |
ExternalInterface sınıfı, kullanıcının web tarayıcısının ActiveX ® veya eklenti komut dosyası oluşturma için bazı web tarayıcıları tarafından gösterilen NPRuntime API'lerini desteklemesini gerektirir. Yukarıda listelenmemiş olsa bile, NPRuntime API'yı destekleyen tarayıcı-işletim sistemi kombinasyonunun ExternalInterface sınıfını da desteklemesi gerekir. Bkz. http://www.mozilla.org/projects/plugins/npruntime.html.
Not: HTML sayfası içine SWF dosyaları gömerken, id
niteliğinin ayarlı olduğundan ve object
ile embed
etiketlerine ait id
ve name
niteliklerinin şu karakterleri içermediğinden emin olun:
. - + * / \
Flash Player uygulamaları için not: Flash Player sürüm 9.0.115.0 ve sonrası .
(nokta) karakterini id
ve name
niteliklerinde destekler.
Flash Player uygulamaları için not: Bir tarayıcıda çalışan Flash Player 10 ve sonrasında, açılır pencere açmak için programlama yoluyla bu sınıfın kullanılması başarılı olmayabilir. Çeşitli tarayıcılar (ve tarayıcı konfigürasyonları), herhangi bir anda açılır pencereleri engelleyebilir; tüm açılır pencerelerin görüntüleneceği garanti edilemez. Ancak bunu başarmanın en iyi yolu, yalnızca kullanıcı eyleminin doğrudan sonucu olarak çalıştırılan bir kodda (örneğin, fare tıklatması veya tuş basışı olayı gibi bir olay işleyicisinde) açılır pencere açmak için bu sınıfın kullanılmasıdır.
ActionScript'te, HTML sayfası üzerinde şunları yapabilirsiniz:
- Herhangi bir JavaScript işlevini çağırma.
- Herhangi bir ada sahip herhangi bir sayıda argümanı iletme.
- Çeşitli veri türlerini iletme (Boolean, Number, String vb.).
- JavaScript işlevinden dönüş değeri alma.
JavaScript'te, HTML sayfası üzerinde şunları yapabilirsiniz:
- ActionScript işlevi çağırma.
- Standart işlev çağrı notasyonunu kullanarak argüman iletme.
- JavaScript işlevine değer döndürme.
Flash Player uygulamaları için not: Flash Player şu anda HTML formlarında gömülü SWF dosyalarını desteklememektedir.
AIR uygulamaları için not: Adobe AIR'de, HTMLLoader deneyiminde yüklenen bir HTML sayfasındaki JavaScript ile o HTML sayfasında gömülü SWF içeriğindeki ActionScript arasında iletişim kurmak için ExternalInterface sınıfı kullanılabilir.
İlgili API Öğeleri
Özellik | Tanımlayan: | ||
---|---|---|---|
available : Boolean [statik] [salt okunur]
Bu oynatıcının, harici arabirim sunan bir kap içinde olup olmadığını gösterir. | ExternalInterface | ||
constructor : Object
Belirli bir nesne örneği için sınıf nesnesine veya yapıcı işlevine bir başvuru. | Object | ||
marshallExceptions : Boolean = false [statik]
Harici arabirimin ActionScript istisnalarını geçerli tarayıcıya ve JavaScript istisnalarını Player’a iletmeyi deneyip denememesi gerektiğini belirtir. | ExternalInterface | ||
objectID : String [statik] [salt okunur]
Internet Explorer'da object etiketinin id niteliğini veya Netscape'de embed etiketinin name niteliğini döndürür. | ExternalInterface |
Yöntem | Tanımlayan: | ||
---|---|---|---|
[statik]
ActionScript yöntemini kaptan çağrılabilir olarak kaydeder. | ExternalInterface | ||
[statik]
Sıfır veya daha fazla argüman ileterek, SWF kabı tarafından sunulan bir işlevi çağırır. | ExternalInterface | ||
Bir nesnenin belirli bir özelliğinin tanımlı olup olmadığını gösterir. | Object | ||
Object sınıfının bir örneğinin parametre olarak belirtilen nesnenin prototip zincirinde olup olmadığını gösterir. | Object | ||
Belirtilen özelliğin bulunup bulunmadığını ve numaralandırılabilir olup olmadığını gösterir. | Object | ||
Dinamik bir özelliğin döngü işlemlerinde kullanılabilirliğini ayarlar. | Object | ||
Bu nesnenin, yerel ayara özel kurallara göre biçimlendirilmiş dize temsilini döndürür. | Object | ||
Belirtilen nesnenin dize olarak temsil edilen halini döndürür. | Object | ||
Belirtilen nesnenin temel değerini döndürür. | Object |
available | özellik |
available:Boolean
[salt okunur] Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Bu player'ın, harici arabirim sunan bir kap içinde olup olmadığını gösterir. Harici arabirim kullanılabilir durumdaysa, bu özellik true
olur; aksi takdirde, false
olur.
Not: Harici API'yi HTML ile birlikte kullanırken herhangi bir JavaScript yöntemini çağırmayı denemeden önce her zaman HTML'in yüklemeyi tamamladığından emin olun.
Uygulama
public static function get available():Boolean
Örnek ( Bu örnek nasıl kullanılır? )
available
özelliği kullanılmaktadır.
package { import flash.text.TextField; import flash.display.MovieClip; import flash.external.ExternalInterface; public class extint_test extends MovieClip { public function extint_test() { var isAvailable:Boolean = ExternalInterface.available; var availTxt:TextField = new TextField(); availTxt.text = isAvailable.toString(); addChild(availTxt); } } }
marshallExceptions | özellik |
public static var marshallExceptions:Boolean = false
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9.0.115.0, Flash Lite 4 |
Harici arabirimin ActionScript istisnalarını geçerli tarayıcıya ve JavaScript istisnalarını Player’a iletmeyi deneyip denememesi gerektiğini belirtir. ActionScript'teki JavaScript istisnalarını ve JavaScript'teki ActionScript istisnalarını yakalamak için bu özelliği açık bir şekilde true
olarak ayarlamalısınız.
İlgili API Öğeleri
Örnek ( Bu örnek nasıl kullanılır? )
addCallback()
yöntemini kullanarak bu işlevi kapsayıcı tarayıcıya kaydeder. Yeni işlev, tarayıcıda yürütülen JavaScript kodunun yakalayabilmesi için bir istisna gönderir. Bu örnekte ayrıca try..catch
ifadesi bulunur ve bu ifade throwit()
işlevi çağrıldığında tarayıcı tarafından gönderilen istisnaları yakalar.
package { import flash.external.* import flash.net.*; import flash.display.*; import flash.system.System; public class ext_test extends Sprite { function ext_test():void { ExternalInterface.marshallExceptions = true; ExternalInterface.addCallback("g", g); try { ExternalInterface.call("throwit"); } catch(e:Error) { trace(e) } } function g() { throw new Error("exception from actionscript!!!!") } } }
objectID | özellik |
addCallback | () | yöntem |
public static function addCallback(functionName:String, closure:Function):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
ActionScript yöntemini kaptan çağrılabilir olarak kaydeder. addCallBack()
öğesi başarıyla çağrıldıktan sonra oynatıcıdaki kayıtlı işlev, kaptaki JavaScript veya ActiveX koduyla çağrılabilir.
Not: Bir tarayıcıda yürütülen yerel içeriklerde ExternalInterface.addCallback()
yöntemine yapılan çağrılar, yalnızca SWF dosyası ve kapsayıcı web sayfası yerel olarak güvenilen güvenlik sanal alanındaysa çalışır. Daha fazla bilgi için, bkz. Flash Player Geliştirici Merkezi Konusu: Güvenlik.
Parametreler
functionName:String — Kabın işlevi çağırabileceği adı.
| |
closure:Function — Çağrılacak işlev kapanışı. Bu, bağımsız bir işlev olabilir veya bir nesne öğesinin yöntemine başvuru yapan yöntem kapanışı olabilir. Bir yöntem kapanışı ileterek geri çağrıyı belirli bir örnek nesnesine ait bir yönteme yönlendirebilirsiniz.
Not: |
Atar
Error — Kap gelen çağrıları desteklemez. Gelen çağrılar, yalnızca Windows Internet Explorer'da ve Mozilla 1.7.5 ve sonrası ya da Firefox 1.0 ve sonrası gibi NPRuntime API kullanan tarayıcılarda desteklenir.
| |
SecurityError — Belirtilen ada sahip bir geri çağırma, ActionScript tarafından erişiminizin olmadığı bir sanal alana zaten eklenmiş; bu geri çağrının üzerine yazamazsınız. Bu sorunu gidermek için, orijinal olarak addCallback() yöntemini çağıran ActionScript'i Security.allowDomain() yöntemini de çağıracak şekilde yeniden yazın.
| |
SecurityError — Kapsayıcı ortam, çağrı kodunun erişiminin olmadığı bir güvenlik sanal alanına ait. Bu sorunu gidermek için şu adımları izleyin:
|
İlgili API Öğeleri
call | () | yöntem |
public static function call(functionName:String, ... arguments):*
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Sıfır veya daha fazla argüman ileterek, SWF kabı tarafından sunulan bir işlevi çağırır. İşlev kullanılabilir değilse çağrı null
değerini döndürür; aksi takdirde işlevin sağladığı değeri döndürür. Opera veya Netscape tarayıcılarında kendi kendini yinelemeye izin verilmez; bu tarayıcılarda yinelemeli çağrı null
yanıtını döndürür. (Kendi kendini yineleme, Internet Explorer ve Firefox tarayıcılarında desteklenir.)
Kap bir HTML sayfasıysa bu yöntem bir script
öğesindeki JavaScript işlevini çağırır.
Kap başka bir ActiveX kabına, bu yöntem belirtilen ada sahip olan FlashCall ActiveX olayını gönderir ve kap bu olayı işler.
Kap, Netscape eklentisini barındırıyorsa yeni NPRuntime arabirimi için özel destek yazabilir veya bir HTML denetimi gömüp bu HTML denetiminin içine Player'ı gömebilirsiniz. Bir HTML denetimi gömerseniz, yerel kap uygulamasına giden bir JavaScript arabirimi aracılığıyla Player ile iletişim kurabilirsiniz.
Not: Bir tarayıcıda yürütülen yerel içeriklerde ExternalInterface.call()
yöntemine yapılan çağrılar, yalnızca SWF dosyası ve kapsayıcı web sayfası (böyle bir sayfa varsa) yerel olarak güvenilen güvenlik sanal alanındaysa işlerlik kazanır. Ayrıca, SWF içeriğini kapsayan HTML sayfasındaki object
ve embed
etiketlerinin allowNetworking
parametresini ayarlayarak bir SWF dosyasının bu yöntemi kullanmasını önleyebilirsiniz. Daha fazla bilgi için, bkz. Flash Player Geliştirici Merkezi Konusu: Güvenlik.
Flash Player uygulamaları için not: Flash Player 10 ve Flash Player 9 Güncelleme 5'te, açılır pencere engelleyicisi etkinse, bazı web tarayıcıları bu yöntemi sınırlar. Bu senaryoda, bu yöntemi yalnızca bir kullanıcı olayına yanıt olarak başarıyla çağırabilirsiniz (örneğin, fare tıklatması veya tuşa basma olayı için bir olay işleyicisinde).
Parametreler
functionName:String — İşlevin kapta çağrılacak alfasayısal adı. Alfasayısal olmayan bir ad kullanılması, çalışma zamanı hatasına neden olur (hata 2155). Hatayı işlemek için try..catch bloğunu kullanabilirsiniz.
| |
... arguments — Kaptaki işleve iletilecek argümanlar. Virgüllerle ayırarak sıfır veya daha fazla parametre belirtebilirsiniz. Bu parametreler, herhangi bir ActionScript veri türünde olabilir. Bir JavaScript işlevine çağrı yapıldığında ActionScript türleri otomatik olarak JavaScript türlerine dönüştürülür; başka bir ActiveX kabına çağrı yapıldığında parametreler istek mesajına kodlanır.
|
* — Kaptan alınan yanıt. Çağrı başarısız olduysa, örneğin kapta öyle bir işlev yoksa, arabirim kullanılabilir değilse, kendi kendini yineleme durumu ortaya çıktıysa (Netscape veya Opera tarayıcısında) veya güvenlik sorunu olursa null değeri döndürülür ve bir hata verilir.
|
Atar
Error — Kap giden çağrıları desteklemez. Giden çağrılar, yalnızca Windows Internet Explorer'da ve Mozilla 1.7.5 ve sonrası ya da Firefox 1.0 ve sonrası gibi NPRuntime API kullanan tarayıcılarda desteklenir.
| |
SecurityError — Kapsayıcı ortam, çağrı kodunun erişiminin olmadığı bir güvenlik sanal alanına ait. Bu sorunu gidermek için şu adımları izleyin:
|
Örnek ( Bu örnek nasıl kullanılır? )
// // Requires: // - A Flash Professional Label component on the Stage with an instance name of "lbl". // - A Flash Professional Button component on the Stage with an instance name of "button". // var xmlResponse:String = "<invoke name=\"isReady\" returntype=\"xml\"><arguments><number>1</number><number>" + stage.stageWidth + "</number><number>" + stage.stageHeight + "</number></arguments></invoke>"; lbl.text = "ExternalInterface.available: " + ExternalInterface.available; lbl.width = 200; button.enabled = ExternalInterface.available; button.addEventListener(MouseEvent.CLICK, button_click); function button_click(evt:MouseEvent):void { ExternalInterface.call("alert", xmlResponse); }
package { import flash.display.Sprite; import flash.events.*; import flash.external.ExternalInterface; import flash.text.TextField; import flash.utils.Timer; import flash.text.TextFieldType; import flash.text.TextFieldAutoSize; import flash.system.Security; public class ExternalInterfaceExample extends Sprite { private var input:TextField; private var output:TextField; private var sendBtn:Sprite; public function ExternalInterfaceExample() { // constructor code Security.allowDomain("*"); input = new TextField(); input.type = TextFieldType.INPUT; input.background = true; input.border = true; input.width = 350; input.height = 18; addChild(input); sendBtn = new Sprite(); sendBtn.mouseEnabled = true; sendBtn.x = input.width + 10; sendBtn.graphics.beginFill(0xcccccc); sendBtn.graphics.drawRoundRect(0, 0, 80, 18, 10, 10); sendBtn.graphics.endFill(); sendBtn.addEventListener(MouseEvent.CLICK, clickHandler); addChild(sendBtn); output = new TextField(); output.y = 25; output.width = 450; output.height = 325; output.multiline = true; output.wordWrap = true; output.border = true; output.text = "Initializing...\n"; addChild(output); if (ExternalInterface.available) { try { output.appendText("Adding callback...\n"); ExternalInterface.addCallback("sendToActionScript", receivedFromJavaScript); if (checkJavaScriptReady()) { output.appendText("JavaScript is ready.\n"); } else { output.appendText("JavaScript is not ready, creating timer.\n"); var readyTimer:Timer = new Timer(100, 0); readyTimer.addEventListener(TimerEvent.TIMER, timerHandler); readyTimer.start(); } } catch (error:SecurityError) { output.appendText("A SecurityError occurred: " + error.message + "\n"); } catch (error:Error) { output.appendText("An Error occurred: " + error.message + "\n"); } } else { output.appendText("External interface is not available for this container."); } } private function receivedFromJavaScript(value:String):void { output.appendText("JavaScript says: " + value + "\n"); } private function checkJavaScriptReady():Boolean { var isReady:Boolean = ExternalInterface.call("isReady"); return isReady; } private function timerHandler(event:TimerEvent):void { output.appendText("Checking JavaScript status...\n"); var isReady:Boolean = checkJavaScriptReady(); if (isReady) { output.appendText("JavaScript is ready.\n"); output.appendText("ExternalInterface.objectID = " + ExternalInterface.objectID + "\n"); Timer(event.target).stop(); } } private function clickHandler(event:MouseEvent):void { if (ExternalInterface.available) { ExternalInterface.call("sendToJavaScript", input.text); } } } }
<!-- saved from url=(0014)about:internet --> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>ExternalInterfaceExample</title> <script language="JavaScript"> var jsReady = false; function isReady() { return jsReady; } function pageInit() { jsReady = true; document.forms["form1"].output.value += "\n" + "JavaScript is ready.\n"; } function sendToActionScript(value) { document.getElementById("ExternalInterfaceExample").sendToActionScript(value); } function sendToJavaScript(value) { document.forms["form1"].output.value += "ActionScript says: " + value + "\n"; } </script> </head> <body onload="pageInit();"> <object id="ExternalInterfaceExample" name="ExternalInterfaceExample" type="application/x-shockwave-flash" data="ExternalInterfaceExample.swf" width="550" height="400"> <param name="movie" value="ExternalInterfaceExample.swf"/> <param name="quality" value="high"/> <param name="allowscriptaccess" value="always"/> <a href="http://www.adobe.com/go/getflash"> <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player"/> </a> </object> <form name="form1" onsubmit="return false;"> <input type="text" name="input" value="" /> <input type="button" value="Send" onclick="sendToActionScript(this.form.input.value);" /><br /> <textarea cols="60" rows="20" name="output" readonly="true">Initializing...</textarea> </form> </body> </html>
Tue Jun 12 2018, 01:09 PM Z