ActionScript3 для связи с JavaScript: лучшие практики - PullRequest
6 голосов
/ 23 ноября 2008

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

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

Ответы [ 3 ]

6 голосов
/ 24 ноября 2008

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

5 голосов
/ 25 ноября 2008

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

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

С помощью ActionScript на странице HTML можно выполнить следующие действия:

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

Из JavaScript на HTML-странице вы можете:

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

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

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

2 голосов
/ 01 декабря 2008

ExternalInterface

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

GetURL

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

FSCommand

  • Да ладно, ExternalInterface - это решение (на 2008 год).
...