Обмен данными из ActionScript3 в JavaScript: лучшие практики

На более абстрактном уровне, чем предыдущий вопрос, по моему опыту, есть 3 способа вызвать Функция javascript на странице html из встроенного .swf с использованием AS3: ExternalInterface, fscommand и navigateToURL.

Давайте сравним и сопоставим эти методы (и, возможно, другие, которые я не перечислил) и поговорим о плюсах и минусах каждого - прямо сейчас ExternalInterface кажется подходящим вариантом с точки зрения гибкости, но он это подходит для всех ситуаций? Есть ли конкретные преимущества с точки зрения скорости выполнения или чего-то подобного? Мне любопытно - что мы думаем?


person Community    schedule 23.11.2008    source источник


Ответы (3)


ExternalInferface был создан, чтобы упростить взаимодействие между JS и Flash, поэтому нет смысла использовать что-либо еще. Обычная практика - сначала проверить, доступен ли он, оценив значение свойства ExternalInterface.available перед вызовом некоторого JS. Это свойство сообщает вам, находится ли SWF, из которого вы хотите вызвать некоторый JS, внутри контейнера, который предлагает внешний интерфейс. Другими словами, при использовании ExternalInterface будет работать. Если его нет, просто используйте flash.net.sendToUrl. Никогда не используйте fscommand (), поскольку он использует VBScript и может вызвать конфликты с другим VBScript на странице. Кроме того, вы можете отправить только одну строку аргумента с помощью fscommand и разделить ее на стороне JS.

person Community    schedule 24.11.2008
comment
хорошо - мне это нравится, это то, для чего он был создан, вещь VBScript, вещь единственного аргумента и navigateToURL в качестве альтернативы - так что, когда вы проверяете доступность ExternalInterface, проверяете ли вы сторону флэш-памяти или он как-то проверяет, есть ли там javascript? - person matt lohkamp; 24.11.2008

Все зависит от того, хотите ли вы, чтобы связь была синхронной или нет, поскольку ExternaInterface может возвращать данные, где navigatoToURL и fscommand асинхронны и могут вызывать только функцию javascript; они не могут возвращать значения или ответ.

Из живых документов в отношении внешнего интерфейса:

Из ActionScript на HTML-странице можно делать следующее:

  • Вызов любой функции JavaScript.
  • Передайте любое количество аргументов с любыми именами.
  • Передавать различные типы данных (логические, числовые, строковые и т. Д.).
  • Получите возвращаемое значение от функции JavaScript.

С помощью JavaScript на странице HTML вы можете:

  • Вызов функции ActionScript.
  • Передавать аргументы, используя стандартную нотацию вызова функций.
  • Вернуть значение функции JavaScript.

Класс flash.external.ExternalInterface является прямой заменой класса flash.system.fscommand.

Таким образом, использование ExternalInterface является предпочтительным методом связи между flash и функцией Javascript, хотя, если вызов является просто асинхронным, можно использовать flash.net.navigateToURL.

person Community    schedule 25.11.2008

Внешний интерфейс

  • Вы можете получить возвращаемое значение из вызовов JS-AS и AS-JS
  • Кодирует ваши аргументы (вызов с массивами, объектами и т. Д. Кодировать их не нужно)
  • Кроссбраузерность
  • Неудовлетворительный при отправке HTML или JSON (специальная кодировка) ломается внутри

getURL

  • Вы можете вызывать только JS, вы не получаете возвращаемое значение, и вам нужно закодировать свои данные
  • Было лучше, чем устаревшее, и во Flash 10 он удален
  • Он действительно удален, поэтому не используйте его;)

fscommand

  • Да ладно, ExternalInterface - это решение (на 2008 год).
person Community    schedule 01.12.2008
comment
хорошо сказано - устаревание и последующее удаление во flash 10 мне очень нравится. - person matt lohkamp; 02.12.2008