Функция не существует при вызове flash-метода из JS - PullRequest
0 голосов
/ 11 февраля 2012

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

К сожалению, всякий раз, когда любой из методов flash вызывается из JS, они возвращают "__ не являетсяfunction "error.

Вот (разветвленная) 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 Ответ

1 голос
/ 11 февраля 2012

Попробуйте сигнализировать со своего SWF, когда он будет готов к приему вызовов.

Например, в вашем ActionScript:

ExternalInterface.call('initIRQ');

И в вашем JavaScript:

function initIRQ() {
    //Begin communication with swf
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...