Actionscript3 для связи JavaScript: лучшие практики

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

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

3 ответов


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


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

из live docs по отношению к внешнему интерфейсу:

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

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

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

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

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

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


ExternalInterface

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

getURL

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

fscommand

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