Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как правильно сделать МОСТ между JS и Flash для Opera (http://www.flasher.ru/forum/showthread.php?t=185645)

inpost 17.10.2012 18:03

Как правильно сделать МОСТ между JS и Flash для Opera
 
Всем привет.
Вот ситуация, на AS пишу:
Код AS3:

ExternalInterface.addCallback("FlashChangeUserInfo", JSChangeUserInfo);

Теперь в JS код:
PHP код:

function VideoFlashChangeUserInfo() {
    
BridgeVideo.FlashChangeUserInfo()
}
window.onload = function() {
    
BridgeVideo document["BridgeVideo"] || window["BridgeVideo"]
    
VideoFlashChangeUserInfo()


Какая цель: при загрузке страницы отправить во флеш данные. Всё просто.
Ситуация вот какая, в ФФ, Хроме - нормально всё работает, в Опере: через раз пишется, что не может понять, что такое "BridgeVideo.FlashChangeUserInfo()", то есть такое чувство, что флеш загрузился в браузер, но ещё не активировался как надо.
Если тупо написать alert(BridgeVideo), то определяет как объект, то есть на странице находит флеш, но не находит этого моста на данный момент. При этом 50\50, каждую вторую загрузку.
Костыль, который я сделал:
PHP код:

window.onload = function() {
    
setTimeout("onLoader()",1000);
}
function 
onLoader() { 

Хотелось бы узнать, как правильно делать? Конечно у меня в догадках, что может быть addEventListener вешать надо на флеш, но тоже непонятно что и как, потому что у меня должны 2 ролика загрузиться и только потом запуститься обработка, либо со стороны флеша отправлять идентификатор, что он загрузился в JS , тем же мостом.

Всё же как верно сделать и объясните, верно ли я понимаю причину того, что флеш.ролик загрузился в браузер, но ещё не активировались функции?

Krusty 17.10.2012 19:05

Все верно вы понимаете. Вам нужно на as3 проверить, что
Код AS3:

 ExternalInterface.available === true

и повесить соответствующий флаг в js, что флеш загрузился и готов, сразу после
Код AS3:

ExternalInterface.addCallback

и вешать в js по загрузке(onload, например, хоть и избыточно)
Код:

setInterval
который будет ждать флаг.

illuzor 17.10.2012 19:20

Я делал проще. Когда флешка загрузилась, она вызывает js функцию, которая в свою очередь вызывает функцию во флешке. Никаких таймеров и интервалов.

tsarapkabel 18.10.2012 14:59

Цитата:

Сообщение от Krusty (Сообщение 1100269)
Вам нужно на as3 проверить, что
Код AS3:

 ExternalInterface.available === true


А можете пояснить, тут обязательно строгое равенство?

in4core 18.10.2012 16:42

Цитата:

А можете пояснить, тут обязательно строгое равенство?
Нет, но написание строго равенства часто систематизирует код, если приучитесь так писать, то будет ощутима разница между == и ===. Но в данном случае логично писать if(ExternalInterface.available) - это стандартный пакет и все вкурсе какое именно значение там может всплыть

Krusty 18.10.2012 18:55

Цитата:

Сообщение от tsarapkabel (Сообщение 1100364)
А можете пояснить, тут обязательно строгое равенство?

Нет, просто так немного правильнее. В одном случае вы проверяете, что значение интерпретируется в логическом контексте как true, в другом-что оно равно true, и тип-boolean, что как бы дисциплинирует, да и мы сразу видим при чтении кода, что это и с чем сравнивается.

inpost 18.10.2012 23:35

Спасибо!

Tails 19.10.2012 00:29

А flashVars не подходит?

Krusty 19.10.2012 00:32

flashVars делает передачу js->swf при публикации, вот и все, тут прямо противоположная задача.


Часовой пояс GMT +4, время: 19:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.