2012-02-10 7 views
0

私はIRCサーバーに接続するためのシンプルなフラッシュソケットを持っています。接続のオープン、接続の終了、およびメッセージの送信のために、,closeおよびsendのメソッドがJSに利用可能になっています(ExternalInterface)。 JSはメッセージを取得するたびにJS内のIRC.io.receiveを呼び出します。このメッセージはJSによって解析されて便利なものになります。JSからフラッシュメソッドを呼び出すときに関数が存在しません

残念ながら、いずれかのFlashメソッドがJSから呼び出されると、「__ is not a function」エラーが返されます。

public class IRC extends MovieClip { 
    public static function open(url:String, port:int) {/* code */} 
    public static function close(port:int) {/* code */} 
    public static function send(port:int, message:String) {/* code */} 

    public function IRC() { 
     ExternalInterface.addCallback('send', IRC.send); 
     ExternalInterface.addCallback('open', IRC.open); 
     ExternalInterface.addCallback('close', IRC.close); 
    } 
} 

そしてHTML/JS::

<html> 
    <head> 
     <script type="text/javascript"> 
      window.IRC = { 
       io: {} 
      }; 
      IRC.io.receive = function(message) {/* code */} 
      IRC.io.send = function(port, str) { 
       document.getElementById('socket').send(port, str); 
      } 
      IRC.io.open = function(url, port) { 
       document.getElementById('socket').open(url, port); 
      } 
      IRC.io.close = function(port) { 
       document.getElementById('socket').close(port); 
      } 
     </script> 
    </head> 
    <body> 
     <!-- ui --> 
     <embed src="socket.swf" quality="high" allowscriptsaccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" allowfullscreen="false" style="display:none;"> 
    </body> 
<html> 

ExternalInterfaceに登録された機能のいずれかへの任意の呼び出しがスローされます。ここ

は、IRCは、ドキュメントクラスです(骨抜き)AS、です"関数は存在しません"例外。私は間違ったことをしましたか?

答えて

1

コールを受信する準備ができたら、swfからの信号を試してみてください。あなたのActionScriptで例えば

、:

ExternalInterface.call('initIRQ'); 

そして、あなたのJavaScriptで:

function initIRQ() { 
    //Begin communication with swf 
} 
+0

どうやらこれはどちらか動作しません - フラッシュは、JSを呼び出すことができるようには見えません。クラスが正しく動作していない可能性はありますか? – Monchoman45

+2

'ExternalInterface'が利用可能であることを確認してください: ' if(ExternalInterface.available){ ExternalInterface.call( 'initIRQ'); } else { trace( "ExternalInterface unavailable"); } ' もしそうでなければ、swfの関数にアクセスしようとする前に、ページが完全に読み込まれるまで待ってみてください。 –

+0

何とかそれを修正しました。今すぐ動作します。ご協力いただきありがとうございます (: – Monchoman45

関連する問題