6

APIを使用してアクション スクリプト内の関数を呼び出そうとしていますが、機能してExternalInterface.addCallbackいないようです。ここに私が持っているものがあります:

アクションスクリプト:

//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!";
        }
    }
}

注: 必要に応じて、flex mxmlc コンパイラを使用して、これを swf にコンパイルしています。

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>

私が得ているエラーは次のとおりです。

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

また、swf ファイルが読み込まれない場合に備えてタイムアウトを追加しようとしましたが、その方法でも成功しませんでした。

何かご意見は?

乾杯、
マイク

4

2 に答える 2

5

私はそれを考え出した。ExternalInterface.callswf がロードされていることを確実に確認できるように、javascipt にシグナルを送信するための重要な方法です。これを行う最も「普遍的な」方法は次のとおりです。

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>
于 2011-06-01T23:24:06.627 に答える