Почему Internet Explorer не видит мой метод Flash ExternalInterface в ASPX? - PullRequest
1 голос
/ 20 сентября 2011

Я использую Javascript для вызова метода на Flash-ролике, встроенном в ASPX-страницу, используя SWFObject.Он отлично работает в Firefox, но Internet Explorer 7 и 8 (пока) утверждают, что объект, возвращаемый swfobject.getObjectById() «не поддерживает это свойство или метод».Я нашел похожие посты на этом и других сайтах, но ничего из того, что я пробовал, не исправило это в IE.

Класс ActionScript 3.0:

public class Player extends MovieClip {
    public function Player()
    {
        Security.allowDomain("http://localhost");
        ExternalInterface.addCallback("test", test);
    }

    public function test():void
    {
        debugBox.appendText("test() called successfully\n");
    }
}

Разметка ASPX:

<head runat="server">
   <script type="text/javascript" src="Scripts/swfobject.js"></script>
   <script type="text/javascript">
    swfobject.registerObject("myPlayer", "9.0.0", "scripts/expressInstall.swf");
   </script>
</head>
<body>
    <form id="form1" runat="server">
    <div class="movie">
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="640" height="640" id="myPlayer">
        <param name="movie" value="Player.swf" />
        <param name="allowscriptaccess" value="always" />
        <!--[if !IE]>-->
        <object type="application/x-shockwave-flash" data="Player.swf" width="640" height="640">
            <!--<![endif]-->
            <a href="http://www.adobe.com/go/getflashplayer">
                <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif"
                    alt="Get Adobe Flash player" />
            </a>
            <!--[if !IE]>-->
        </object>
        <!--<![endif]-->
    </object>
</div>

Далее в разметке ASPX код, который пытается получить объект Flash и вызвать для него метод test(), происходит в обратном вызове AJAX от стороннего компонента (DevExpress ASPxHiddenField).Этот обратный вызов вызывается пользовательским вводом после загрузки фильма Flash:

    <dx:ASPxHiddenField ID="filenameHiddenField" runat="server" OnCustomCallback="filenameHiddenField_CustomCallback"
        SyncWithServer="False">
        <ClientSideEvents EndCallback="function(s, e) {          
        var playerObject = swfobject.getObjectById(&quot;myPlayer&quot;);
    playerObject.test();
}" />
</dx:ASPxHiddenField>

Internet Explorer жалуется на последнюю строку в этой функции: «Объект не поддерживает это свойство или метод».

Спасибо!

Ответы [ 4 ]

1 голос
/ 07 августа 2012

похоже, что вы пропустили параметр id во втором теге для вставки объекта, который предназначен для IE

0 голосов
/ 20 сентября 2011

ExternalInterface.addCallback должен вызываться в DOMContentLoaded.

public function Player()
{
    ...

    setTimeout(regCallBack, 10);
}

private function regCallBack():void
{
    ExternalInterface.call("test", test);
}
0 голосов
/ 20 сентября 2011

Оказывается, Capabilities.isDebugger () является виновником. Я пропустил это в своем первоначальном сообщении для краткости (и потому что я думал, что это никоим образом не должно иметь значения), но конструктор в моем классе ActionScript на самом деле выглядит так:

public function Player()
{
    Security.allowDomain("localhost");

    if (!Capabilities.isDebugger)
    {
        ExternalInterface.addCallback("test", test);
    }
}

Я добавил эту проверку, потому что ExternalInterface.addCallback() выдает «Ошибка: Ошибка № 2067: ExternalInterface недоступен в этом контейнере. Для ExternalInterface требуется Internet Explorer ActiveX, Firefox, Mozilla 1.7.5 или более поздней версии или другие браузеры, поддерживающие NPRuntime «. при выполнении в отладчике Flash.

Так что, очевидно, Flash Player в Internet Explorer является отладочной версией; ExternalInterface.addCallback() никогда не звонили.

0 голосов
/ 20 сентября 2011

Пожалуйста, смотрите FAQ SWFObject # 7 , он специально решает эту проблему.

...