
Кросс-браузерная передача данных между Javascript и Flash
Вопрос, неоднократно поднятый и перемолоченный в Интернете, однако, к нему возвращаются снова и снова.
Дано:
Приложение, по разным причинам вынужденное предавать данные из javascript во flash и обратно. Вариант описанный macromedia сбоит при использовании Mozilla, вариант, описаный Колином Муком (Colin Moock) сбоит при использовании Opera. Под словом «Сбоит» понимается «работает с ошибками, работает нестабильно или не работает вовсе»
Решение:
Попробовать вот тут: пример
Итак, решение. Для передачи данных из Flash в javascript нужно использовать вызов getURL(), где в качестве параметра передавать выдов js-функции.
В примере:
getURL("javascript: receive("+flash_variable+")");
Никаких особенных настроек при этом не нужно.
Другое дело — обратный процесс. Тут необходимо изменение в HTML-коде вызова флэш-ролика. Во-первых, тегу нужно присвоить id, по которому javascript будет к нему обращаться, во-вторых, тегу <embed/> дать атрибут name со значением, совпадающим с id тега <object>, и там же — атрибут swliveconnect со значением "true". Это нужно, чтобы всякие подозрительные браузеры типа Opera также работали без ошибок.
window.document.flash_id.SetVariable("flash_var", jsvalue);
Только такая запись помогает добиться результата. Opera в качестве flash_id возьмет name элемента <embed/>и выделываться не будет. Подробности — в коде страницы примера. Во флэш-ролике ничего особенного нет
Замеченные проблемы:
- По каким-то причинам в примере в Mozilla не передается русский текст из флэшки в страницу. Скорее всего, это связано с самим роликом.
- Опера так и работает неоднозначно. Даже если используем один и тот же билд на разных машинах.