На более абстрактном уровне, чем предыдущий вопрос, по моему опыту, есть 3 способа вызвать функцию javascript на странице html из встроенного .swf с использованием AS3: ExternalInterface, fscommand и navigateToURL.
Давайте сравним и сопоставим эти методы (и, возможно, другие, которые я не перечислил) и поговорим о плюсах и минусах каждого - прямо сейчас ExternalInterface кажется вроде как способ гибкости, но подходит ли он для всех ситуаций? Есть ли конкретные преимущества с точки зрения скорости выполнения или чего-то подобного? Мне любопытно - что мы думаем?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


ExternalInferface был создан, чтобы упростить взаимодействие между JS и Flash, поэтому нет смысла использовать что-либо еще. Обычная практика - сначала проверить, доступен ли он, оценив значение свойства ExternalInterface.available перед вызовом некоторого JS. Это свойство сообщает вам, находится ли SWF, из которого вы хотите вызвать некоторый JS, внутри контейнера, который предлагает внешний интерфейс. Другими словами, при использовании ExternalInterface будет работать. Если его нет, просто используйте flash.net.sendToUrl. Никогда не используйте fscommand (), поскольку он использует VBScript и может вызвать конфликты с другим VBScript на странице. Кроме того, вы можете отправить только одну строку аргумента с помощью fscommand и разделить ее на стороне JS.
Все зависит от того, хотите ли вы, чтобы связь была синхронной или нет, поскольку ExternaInterface может возвращать данные, а navigatoToURL и fscommand являются асинхронными и могут вызывать только функцию javascript; они не могут возвращать значения или ответ.
Из живых документов в отношении внешнего интерфейса:
From ActionScript, you can do the following on the HTML page:
- Call any JavaScript function.
- Pass any number of arguments, with any names.
- Pass various data types (Boolean, Number, String, and so on).
- Receive a return value from the JavaScript function.
From JavaScript on the HTML page, you can:
- Call an ActionScript function.
- Pass arguments using standard function call notation.
- Return a value to the JavaScript function.
Класс flash.external.ExternalInterface является прямой заменой класса flash.system.fscommand.
Таким образом, использование ExternalInterface является предпочтительным методом связи между флэш-памятью и функцией Javascript, хотя, если вызов является просто асинхронным, можно использовать flash.net.navigateToURL.
Внешний интерфейс
getURL
fscommand
хорошо сказано - устаревание и последующее удаление во flash 10 мне очень нравится.
хорошо - мне это нравится, это то, для чего он был создан, вещь VBScript, вещь единственного аргумента и navigateToURL в качестве альтернативы - так что, когда вы проверяете доступность ExternalInterface, проверяете ли вы на стороне флэш-памяти или он как-то проверяет, есть ли там javascript?