Flash8 ve Javascript Entegrasyonu


Flash ve javascript integrasyonu herzaman flash programcıları için bir sorun olmuştur. fscommand ve getURL komutları ile bu ilişki sağlanılmaya çalışılmıştır.fscommand stabil olmayan ve tarayıcı türüne göre sorun çıkartan bir komut olduğundan genelde getURL tercih edilmekte idi.
Kullanım:
getURL("javascript:alert('hello world!');"); şeklindeydi.
Bu komutta yeterli stabilitede bir komut olmayıp özellikle birden fazla yerde kullanıldığında problemli idi. Flash8 ile bu sorun büyük ölçüde düzeltilmiş ve ExternalInterface sınıfı ile her tarayıcıda stabil olan bir entegrasyon sağlanılmıştır.

ExternalInterface sınıfı:

Bu sınıf external bir API `dir ve flash ile bir html sayfasındaki javascript komutu arasında iletişim kurmanın en iyi yoludur. Bu kod actionscript1 ve üstü ve flash player8 ile çalışır. Ayrıca kullanılan tarayıcılar alttaki özellikte olmalıdır:

Tarayıcı

İşletim Sistemi

Internet Explorer 5 ve üstü

 Windows 

 -

Netscape 8.0 ve üstü

 Windows 

 Macintosh 

Mozilla 1.7.5 ve üstü

 Windows 

 Macintosh 

Firefox 1.0 ve üstü

 Windows 

 Macintosh 

Safari 1.3 ve üstü

 -

 Macintosh 

Flash ve javascript haberleşmesi 2 yönlü sağlanır.

1- Flash içinden bir html sayfasındaki javascript`e komut göndermek:call komutu kullanılır:

ExternalInterface.call(fonksiyon_adı, parametre)

2- Html sayfasındaki bir javacript komutundan flash içine komut göndermek:addCallback komutu kullanılır:

ExternalInterface.addCallback(fonksiyon_adı, instance(opsiyonel), parametre);

UYARI: Flash player8 de güvenlik nedeni ile flash-javascript entegrasyon kodları lokalde çalışmamaktadır. Sadece dosyalar servera yüklendiğinde uygulamayı görme şansınız olur. Bunun nedeni html sayfasına playerın eklediği allowScriptAccess="sameDomain" eklentisidir. Ben denemeden bir sonuç alamamış olsam da çözüm için hem object hem de embed taglarındaki sameDomain kısmını always ile değiştirmeniz önerilmektedir.

 

Call Metodu : Flash içinden bir html sayfasına komut göndermek için hazırlanan bu çalışma da sahneye bir input metin kutusu ve bir button component yerleştirilmiştir. Bu çalışmayı html sayfası üzerinde açıp metin kutusuna bir mesaj yazıp butona basıldığında bu mesaj bir uyarı mesajı olarak tarayıcıda gözlenecektir. Alttaki örnekte metin kutusuna mesaj yazıp deneme yapabilirsiniz.

 

 

Uygulama: Sahneye input bir metin kutusu(instance name=alert_txt) ve bir button component(instance name=alert_butn) yerleştirin. 1.kareye şu komutu verin:

// ExternalInterface flash içine import ediliyor
import flash.external.ExternalInterface;

/*Butona tıklandığında metin kutusuna girilen string
alert mesaj olarak gözlenir.Component değil buton
kullanmak isterseniz call komutunu on(release) içinde
yazabilirsiniz*/

alert_butn.clickHandler = function() {
ExternalInterface.call("alert", alert_txt.text);
}
//Kodların sonu

Yukarıdaki yazıldığı gibi flash player8`deki güvenlik sınırlaması nedeni ile bu kodlar lokalde bilgisayarınızda denediğinizde çalışmayacaktır.

addCallback Metodu : Bir html sayfasındaki javascript`ten flash içine fonksiyon veya komut alma yöntemi için kullanılır. Aşağıdaki swf dosyasında siyah renkli bir klip ve buton mevcuttur. Butona tıkladığınızda bir pencere açılacak ve buraya gireceğiniz renk değerini okeylediğinizde mavi renkli klip seçtiğiniz renge dönecektir. Butonu tıkladığınızda girilecek renk kodu için 0xFF0055 gibi bir format kullanmalısınız

Uygulama:

Flash kodları: Sahneye 100*100 piksellik bir kare çizin bu çizimi seçip film klibi yapın ve instance name olarak rec_mc ismini atayın. Hemen yanına bir button component ekleyip adını change_butn olarak değiştirin. Şimdi ana sahnede 1.kareye şu komutu verin:

// ExternalInterface flash içine import ediliyor
import flash.external.ExternalInterface;
//karenin rengini değiştirir
function onChange(clr:Number) {
var temp_color:Color = new Color(rec_mc);
temp_color.setRGB(clr);
}
//Javascript içindeki onChange fonksiyonunu çağırır
ExternalInterface.addCallback("onChange", this, onChange);

change_butn.clickHandler = function() {
ExternalInterface.call("callPrompt", "İstediğiniz rengi yandaki formata uygun şekilde giriniz? (örn: 0xff0000)");
}
//Kodların sonu

Javascript kodları: Flash filmini yayınladığınızda çalışmaının gömülü olduğu html sayfasında bazı değişiklikler yapmalısınız. Bu nedenle html sayfasını bir html editörü ile açıp title başlığından hemen sonra head tagları arasına şu eklentiyi yapın:

<script language=JavaScript>
var me; //Swf ID`sini gösterir

//Doğru referansı getirir
function getID(swfID) {
if (navigator.appName.indexOf("Microsoft") > -1) {
me = window[swfID];
} else {
me = document[swfID];
}
}
//Bu flash içine onChange olayını çağıracaktır
function makeCall(str){
me.onChange(str);
}
//Flashtan çağrılacak fonksiyondur
function callPrompt(str){
makeCall(prompt(str));
}
</script>

ve body tagına alttaki eklentiyi yapın:

<body bgcolor="#ffffff" onload="getID('external2');">

DOSYALARI İNDİR

Bu çalışma da güvenlik nedeni ile lokalde gözlenemeyecektir. Denemeyi server üzerinde uygulamanız gerekir. İndireceğiniz dosyadaki html sayfasına ilgili kodlar eklenmiştir. Sizin ayrı bir eklenti yapmanıza gerek yoktur. Flash help kısmında ExternalInterface adı ile arama yaparsanız daha detaylı açıklamalara ulaşabilirsiniz.