2011-06-01 26 views
6

ExternalInterface.addCallback API'sini kullanarak bir eylem komut dosyasındaki bir işlevi çağırmaya çalışıyorum, ancak çalışmasını sağlayamıyorum. İşte ne var:Javascript aracılığıyla bir ActionScript işlevine erişme

ActionScript:

//MyClass.as 
package { 

    import flash.display.Sprite; 
    import flash.external.ExternalInterface; 

    public class MyClass extends Sprite 
    { 
     public function MyClass() 
     { 
      ExternalInterface.addCallback('getStringJS', getStringAS); 
     } 

     public function getStringAS():String 
     { 
      return "Hello World!"; 
     } 
    } 
} 

NOT: Ben bu konularda esnek mxmlc derleyici kullanarak bir swf içine bu derleme.

HTML/JavaScript:

<!doctype html> 
<html> 
    <head> 
     <title>User Identification</title> 
    <head> 
    <body> 
     <object id="MyClass" name="MyClass" type="application/x-shockwave-flash" data="MyClass.swf" width="1" height="1"> 
      <param name="movie" value="MyClass.swf"> 
      <embed src="MyClass.swf" width="1" height="1"> 
     </object> 
     <script type="text/javascript"> 
      var flash = document.getElementById("MyClass"); 
      var str = flash.getStringJS(); 
      alert(str); 
     </script> 
    </body> 
</html> 

alıyorum hatadır:

Uncaught TypeError: Object #<HTMLObjectElement> has no method 'getStringJS' 

Ben de swf dosya yükleme değildi durumda zaman aşımı ekleyerek çalıştı ama Bu yöntemle herhangi bir başarı elde edemedi.

Herhangi bir düşünce?

Alkış,
Mike

cevap

5

Bunu çözdüm. Javascipt'i ExternalInterface.call aracılığıyla işaretlemenin en önemli yolu, swf'nin yüklü olduğundan emin olduğumuzu bilmemizdir. aşağıdaki gibi bunu yapmak için en "Evrensel" yoludur:

MyClass.as

//MyClass.as 
package { 

    import flash.display.Sprite; 
    import flash.external.ExternalInterface; 

    public class MyClass extends Sprite 
    { 
     public function MyClass() 
     { 
      ExternalInterface.addCallback('getStringJS', getStringAS); 
      if (ExternalInterface.available) { 
       ExternalInterface.call("isConnectedFlex"); 
      } 
     } 

     public function getStringAS():String 
     { 
      return "Hello World!"; 
     } 
    } 
} 

index.html

<!doctype html> 
<html> 
    <head> 
     <title>User Identification</title> 
    <head> 
    <body> 
     <object id="MyClass" name="MyClass" type="application/x-shockwave-flash" data="MyClass.swf" width="1" height="1"> 
      <param name="movie" value="MyClass.swf"> 
      <embed src="MyClass.swf" width="1" height="1"> 
     </object> 
     <script type="text/javascript"> 

      var flash = document.getElementById("MyClass"); 

      function isConnectedFlex() { 
       var str = flash.getStringJS(); 
       alert(str); 
      } 


     </script> 
    </body> 
</html> 
+0

Güzel örnek. Yine de 2017'de çalışıyor. Diğerleri için başka bazı ek bilgiler de burada bulunabilir: http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7cb1.html – Aleks

2

ben sorunu değil yüklenen flaş meselesi olduğunu düşünüyorum. Ben window.onload olayını kullanarak kodunuzu çalıştı ve benim için çalıştı:

flaş aynıdır ...

HTML/JS:

<!doctype html> 
<html> 
    <head> 
     <title>User Identification</title> 
    <head> 
    <body> 

     <object id="MyClass" name="MyClass" type="application/x-shockwave-flash" data="MyClass.swf" width="1" height="1"> 
      <param name="movie" value="MyClass.swf"> 
      <embed src="MyClass.swf" width="1" height="1"> 
     </object> 

     <script> 

      window.onload = function() { 

       var flash = document.getElementById("MyClass"); 
       var test = flash.getStringJS("test"); 
       alert(test); //pops up with "Hello World!" on Firefox 

      }; 

     </script> 
    </body> 
</html> 

bu yardım ediyor mu?

+0

evet, benim gerçekten kontrol etmeyi öğrenmelisin anlamamı sağladı benim diğer tarayıcılarda çalışmak haha. Firefox ve IE'de çalışır, ancak krom değildir. Her iki şekilde de hala daha evrensel olarak kabul edilebilir bir yönteme ihtiyacım var. Düşüncesi olan var mı? – Swift

+0

Anladım. Bu bağlantıya bir göz atmak isteyebilirsiniz: [sorun giderme-dış arayüz-pozlama-yöntem-in-google-krom] (http://stackoverflow.com/questions/1436722/problem-accessing-externalinterface-exposed-method-in -google-chrome) – Ian

İlgili konular