flash fscommands и javascript - PullRequest
       6

flash fscommands и javascript

3 голосов
/ 11 ноября 2008

Я пытаюсь заставить mp3 flash player работать с моим javascript во всех браузерах. Сначала все прошло хорошо, но быстро понял, что мой код не работает на MSIE.

После попытки выяснить это я нашел в коде ссылки:

<!--[if IE]>
<script type="text/javascript" event="FSCommand(command,args)" for="myFlash">
eval(args);
</script>
<![endif]-->

Как превратить это в предложение javascript или jquery, чтобы я мог заполнить его, где он принадлежит (в audio.js)?

Ответы [ 4 ]

2 голосов
/ 11 ноября 2008

Этот синтаксис с тегом с атрибутами «event» и «for» является только Internet Explorer способом установки обработчика событий для объекта DOM. Здесь он добавляет обработчик события FSCommand к объекту myFlash. Это необходимо, потому что код, работающий внутри объекта Flash, может захотеть запустить JavaScript в браузере. Для этого объект Flash будет вызывать обработчик события FSCommand, передавая JavaScript для запуска в качестве аргументов события.

В этом проигрывателе имя объекта слушателя JS передается в параметре FlashVars проигрывателю. Затем он использует FSCommands из ActionScript для изменения этого объекта прослушивателя с периодическим вызовом метода этого прослушивателя, когда были изменены другие его свойства. Я полагаю, что IE не сможет запустить код JS с помощью этого метода, пока обработчик FSCommand не будет добавлен в объект проигрывателя Flash, поэтому этот код существует. Измените его, чтобы использовать идентификатор вашего объекта Flash, и вы должны быть в хорошей форме.

1 голос
/ 26 июля 2011

И ... в итоге мы имеем:

var ie_sucks = document.getElementById('comebacker_audio');
ie_sucks.attachEvent("FSCommand", function(command, args) {eval(args);});

и если это не сработает, попробуйте проверить html для вставки объекта. Пример здесь: http://kb2.adobe.com/cps/415/tn_4150.html

;)

1 голос
/ 14 декабря 2010

Может быть, это больше о внедрении Flash динамически.

Я точно так же застрял с mp3-плеером. Дело в том, что IE не заботится о специальном теге скрипта с атрибутами 'event' и 'for', если он добавлен ПОСЛЕ загрузки страницы. Мой IE не получал событие, если бы не загружал jquery's .html () при загрузке страницы, работал только document.write. Но document.write нельзя использовать после загрузки страницы, если он не предназначен для iframe или другого механизма поклонения дьяволу.

Что хорошо, так это то, что IE не делает различий между назначением обработчика события в этом теге сценария ублюдка или программно. Это означает, что:

<script type="text/javascript" event="FSCommand(command,args)" for="myFlash">
    eval(args);
</script>

в IE напрямую переводится как:

function foo(command, args){
    eval(args);
}
var ie_sucks = document.getElementById('myFlash');
ie_sucks.attachEvent("FSCommand", foo);
0 голосов
/ 14 июня 2012

Спасибо всем за вышеизложенное. Я просто скину несколько строк, которые мне пригодились.

Чтобы повторно использовать код в браузерах, выполните:

<script type="text/javascript">
    function mySwf_DoFSCommand(command, args) {
        // do stuff
    }
</script>

<!--[if IE]>
<script type="text/javascript" event="FSCommand(command,args)" for="mySwf">
    mySwf_DoFSCommand(command, args);
</script>
<![endif]-->
...