Я встраиваю flash-объект (swf-файл) в HTML-страницу. Объект написан в формате as3 и построен с помощью Flash Builder. Его цель - показать анимацию, а затем закончить.

Для меня действительно важно иметь возможность уведомить контейнер о завершении анимации, но я не могу найти ничего, что работает. Я использую swfobject версии 2.2.

Пробовал как в Chrome 40, так и в IE 11.

HTML (образец):

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
    <script type="text/javascript" src="js/swfobject.js"></script>
    <script type="text/javascript">
        function flashFinished() {alert('finished!');}
    </script>
    <script type="text/javascript">
        var flashVars = {}
        var flashParams = {allowscriptaccess : 'sameDomain'}
        var flashAttributes = {id : 'myflash', name : 'myflash'}
        swfobject.embedSWF('myflash.swf', 'flashObject', '960', '720', '9.0.0', 'swf/expressInstall.swf',
                flashVars, flashParams, flashAttributes);
    </script>
</head>
<body>
    <div id="flashObject">
        <p>To view this page please make sure that an updated version of Adobe Flash Player is installed.</p>
    </div>
</body>

AS3 (образец):

package
{
    public class myflash extends Sprite
    {
        public function myflash()
        {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            startPlay();
        }
        private function startPlay() : void {
            // do whatever, then make sure function finishPlay is called in the end
        }
        private function finishPlay(event:TimerEvent) : void {
            if (ExternalInterface.available)
                ExternalInterface.call('flashFinished');
        }
    }
}

Моя функция "flashFinished" никогда не вызывается. Кто-нибудь может подсказать, что я делаю не так? Спасибо!

0
Giorgio Barchiesi 24 Фев 2015 в 13:05

2 ответа

На самом деле это было вопросом безопасности из-за местной среды, как предлагает @akmozo. Я зашел в глобальные настройки безопасности Flash Player:

http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html

И добавил корневую папку дерева, содержащего все HTML-страницы / объекты SWF, в разрешенные места. Так что теперь он работает и локально.

0
Giorgio Barchiesi 24 Фев 2015 в 18:52

Если работа с флэш-кодом выполнена и она вам больше не нужна, просто завершите javascript в as3:

var exitStr:String = "javascript:terminate()";
navigateToURL(new URLRequest(exitStr),"_self");

А затем добавьте функцию onUnload в HTML, которая будет вызываться в этот момент:

onUnload="flashFinished();"

Примечание: я использовал этот код с swfobject v1.4, не уверен насчет v2.2

1
Banovsky 24 Фев 2015 в 14:21