FlashVars не лучше или хуже. Это совсем другое. Он позволяет передавать некоторые данные в ваш swf во время загрузки. Если вам нужно только передать SWF в какой-то контекст, FlashVars - это то, что вы хотите.
Теперь, если вам требуется больше взаимодействия между вашим swf и его хостом (в большинстве случаев это веб-браузер, который может запускать Javascript), ExternalInterface поможет.
Если вы хотите передать данные из swf на хост, используйте ExternalInterface.call со стороны AS и установите соответствующую функцию JS на свой html. Если связь идет наоборот, используйте ExternalInterface.addCallback со стороны AS и создайте функцию JS, которая вызывает этот обратный вызов на вашем html. Конечно, вы можете использовать как call, так и addCallback, если вам это нужно. В большинстве случаев я использую ExternalInterface.call, так как я использую этот механизм в основном для вызова аналитики Google или какой-либо другой системы отслеживания.
Важным аспектом ExternalInterface является то, что для его успеха должны быть загружены как ваш swf, так и JS-код, который обрабатывает сообщение. Это очевидно, если вы подумали об этом на секунду, но могли бы привести к проблемам, если вы не учтете это. То есть, если из JS вы вызываете функцию, которая еще не добавлена в качестве обратного вызова в вашем swf, ну ... она не будет вызвана. То же самое верно и наоборот, хотя на практике это реже.
+1 что ответ научил меня чему-то, спасибо. Хороший вопрос тоже. Я использую blazeDS в основном, и мне еще не нужно было научиться подключаться к JavaScript. Теперь я достаточно усвоил, чтобы заставить его работать. – gMale