Javascript и Flash: обмен данными

Кросс-браузерная передача данных между 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/>и выделываться не будет. Подробности — в коде страницы примера. Во флэш-ролике ничего особенного нет

 

Замеченные проблемы:

  1. По каким-то причинам в примере в Mozilla не передается русский текст из флэшки в страницу. Скорее всего, это связано с самим роликом.
  2. Опера так и работает неоднозначно. Даже если используем один и тот же билд на разных машинах.

Комментарии (8)

mem: 1072 total: 10 module: 4 xsl: 3