PDA

Просмотр полной версии : ExternalInterface из JS в Flash не работает


scorp2007
26.09.2015, 18:46
Приветствую, казалось бы более менее понятная вещь, из флешки выполнить js функцию получилось легко, а наоборот вот уже битый час голову ломаю в чем проблема. Флеш на страницу вставляю с помощью SwfObject. Нужно из js скрипта выполнить функцию в флешке, вот мой коды:

Flash:
Security.allowDomain("*");
if (ExternalInterface.available)
{
trace("ExternalInterface= " + ExternalInterface.available);
flash.external.ExternalInterface.addCallback('jsToFlash', jsHandler);
}

private function jsHandler(message:String):void
{
menum.entxt.text = message;
}

HTML(JS):
var params = {};
params.menu = "false";
params.salign = "t";
params.scale = "noscale";
params.wmode = "transparent";
params.allowScriptAccess = "always";

var attributes = {};
attributes.id = "hero";
attributes.name = "hero";

swfobject.embedSWF("hero.swf", "app", "700", "525", "10","https://vkontakte.ru/swf/expressinstall.swf", flashVars, params, attributes);

//Другой код и в нужном месте вызываю
document.getElementById("hero").jsToFlash();

И в итоге получаю такую ошибку при попытке отправить элементу hero (сам элемент находится):
Uncaught TypeError: document.getElementById(...).jsToFlash is not a function

В чем дело и как исправить подскажите кто знает плиз!

Добавлено через 3 часа 55 минут
Выяснил в чем дело было, оказывается флешка не обновлялась просто на сайте!

ALeXVoz
27.09.2015, 00:24
Можно пробовать вот так
<script>
function sendFromJS(value) {
var movie = (navigator.appName.indexOf("Microsoft")!=-1 ? window : document)["BridgeMovie"]
movie.jsToFlash(value);
}
</script>

Где флешь вставлен через эмбед
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" name="BridgeMovie" width="500" height="300" id="BridgeMovie">
<param name="movie" value="hero.swf" />
<param name="allowScriptAccess" value="sameDomain" />
<embed src="hero.swf" name="BridgeMovie" align="middle" play="true" loop="False" quality="high" allowscriptaccess="sameDomain" width="500" height="300" scale="exactfit" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
</embed>
</object>

BridgeMovie - встречается в id и в name и у объекта и у эмбеда. Не помню обязательно это или нет. Надо тестировать.

Насчет SwfObject не знаю, сработает ли метод. Надо тестировать.
Код взят с рабочего проекта.

Ошибка может быть в том, что сначала надо получить ссылку на объект (в переменную) а потом уже у переменной вызывать метод jsToFlash