2012-02-10 2 views
0

У меня есть простой флеш-сокет, который я использую для подключения к IRC-серверам. Он имеет open, close и send метод, доступный JS через ExternalInterface, для открытия соединений, закрытия соединений и отправки сообщений соответственно. Сокет вызывает IRC.io.receive в JS всякий раз, когда он получает сообщение, которое разбирается JS во что-то полезное.Функция не существует при вызове метода flash из JS

К сожалению, всякий раз, когда какой-либо из методов вспышки вызывается из JS, они возвращают ошибку «__ не является функцией».

Вот (разбавленные) AS, где IRC является класс документа:

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 бросает исключение «функция не существует». Я сделал что-то не так?

ответ

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 недоступен"); } ' Если нет, вы можете попробовать подождать, пока страница не будет полностью загружена (если вы этого не сделаете), прежде чем пытаться получить доступ к функциям в swf. –

+0

Это как-то исправлено - оно работает сейчас. Спасибо за вашу помощь (: – Monchoman45

Смежные вопросы