2008-11-23 17 views
6

Daha soyut bir düzeyde a previous question deneyimlerime dayanarak, bir html sayfasında bir html sayfasında AS3: ExternalInterface, fscommand ve navigateToURL kullanarak gömülü .swf dosyasından bir javascript işlevi çağırmanın 3 yolu vardır. Actionscript3 JavaScript iletişimi: en iyi uygulamalar

en karşılaştıralım ve (ı listelemediğim ve belki diğerlerini) Bu yöntemleri kontrast ve her birinin avantaj ve dezavantajları hakkında konuşmak - şu anda ExternalInterface esneklik açısından gitmek için yol gibi görünüyor ama öyle tüm durumlar için doğru mu? Yürütme hızı veya bunun gibi bir şey açısından somut faydalar var mı? Merak ediyorum - ne düşünüyoruz?

cevap

6

ExternalInferface, JS ile Flash arasında iletişimi kolaylaştırmak için oluşturulmuştur, bu nedenle başka bir şey kullanmak gerçekten mantıklı değildir. Yaygın uygulama, önce bazı JS'ye çağrı yapmadan önce ExternalInterface.available özelliğinin değerini değerlendirerek mevcut olup olmadığını kontrol etmektir. Bu özellik, bazı JS'yi aramak istediğiniz SWF'nin harici bir arabirim sunan bir kapsayıcıda olup olmadığını belirtir. Diğer ifadelerde, ExternalInterface kullanılıyorsa çalışacaktır. Eğer mevcut değil ise sadece flash.net.sendToUrl kullanın. VBScript'i kullandığından fscommand() öğesini asla kullanmayın ve bir sayfada diğer VBScript ile çakışmalara neden olabilir. Ayrıca, yalnızca bir argüman dizgisini fscommand ile gönderebilir ve JS tarafında bölmek zorunda kalabilirsiniz. Eğer iletişim navigatoToURL ve fscommand asenkron ve sadece bir javascript işlevini çağırabilirsiniz nerede gibi verileri döndürebilir ExternaInterface olarak senkron ya da olmamak istiyorsanız

+0

tamam - Hoşuma gitti, VBScript olayı, tek argüman olayı ve alternatif olarak navigateToURL için yapıldığı şeyden ötürü - yani, ExternalInterface'in kullanılabilirliğini kontrol ettiğinizde, flaş tarafı, ya da javascript orada olup olmadığını kontrol etmek bir şekilde mi? –

+0

Cevabımı biraz güncelledi. –

+0

güzel, bu mantıklı. –

5

Her şey bağlıdır; Değerleri veya cevabı geri alamazlar. Dış arabirim ile ilgili olarak canlı Dokümanlar

: ActionScript itibaren

, HTML sayfasında şunları yapabilirsiniz:

  • Çağrısı herhangi bir JavaScript işlevi.
  • Herhangi bir adla, herhangi bir adla geçin.
  • Çeşitli veri tiplerini geçirin (Boolean, Number, String, vb.).
  • JavaScript işlevinden bir dönüş değeri alın.
  • HTML sayfasında JavaScript itibaren

şunları yapabilirsiniz:

  • Çağrı ActionScript işlevi.
  • Standart işlev çağırma işaretini kullanarak bağımsız değişkenleri aktarın.
  • JavaScript işlevine bir değer döndürür.

flash.external.ExternalInterface sınıf flash.system.fscommand sınıf için doğrudan yerine geçer. Çağrı sadece Asenkron ise o flash.net.navigateToURL kullanmak Tamam olsa

Yani kullanarak ExternalInterface, flaş ve JavaScript işlevi arasındaki tercih edilen yöntem veya iletişimdir.

+0

asenkronize nokta iyi bir tanesidir. –

2

Sen JS-AS dönüş değerini alabilir ve AS-JS

  • senin argümanlar
  • (diziler, nesneler, vb onları kodlamak gerek yok) çağrısında kodlar çağıran

    • ExternalInterface
    • Çapraz tarayıcı
    • kusurlu gönderip zaman HTML veya JSON (özel kodlama), bu breaks internally

    getURL

    • Yalnızca JS çağırabilir, değil dönüş değeri almak ve verilerinizi kodlamak için gereken
    • kaldırılmış ve Flash 10'da o
    • Gerçekten kaldırılır kaldırıldığını daha güzeldi böylece bunu kullanmıyorum;)

    fscommand

    • Dışarıdan ExternalInterface çözümdür (2008).
    +0

    iyi yerleştirilmiş - benim için flaş 10 cinayetlerinde kullanım dışı bırakma ve müteakip kaldırma. –