Javascript для флеш связи - PullRequest
8 голосов
/ 18 ноября 2008

Я пытаюсь вызвать функцию Actionscript из javascript, но у меня возникают проблемы в Internet Explorer. Я использую Swiff.remote в mootools 1.2.1 для вызова функции actionscript, например:

Swiff.remote(playSwf.toElement(), 'sendResult', result, plays, name);

Все это прекрасно работает в FireFox, Safari и Opera, но в Internet Explorer 6 и 7 я получаю "неопределенную" ошибку Я пробовал использовать стандарт болота:

window['flash'].sendResult(result, plays, name);

Безрезультатно.

Спасибо за любую помощь. Mark

Ответы [ 6 ]

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

Я не знаком с плагином Swiff, но вам не нужен плагин для вызова флеш-функций из Javascript. Это даже проще сделать изначально.

От AS:

//1. calling javascript function from Flash.
ExternalInterface.call("sendData",tempStr);
// argument 1: javascript function, argument 2: data/variables to pass out.
//2. calling javascript function from Flash with recursion.
var returnValue:String = ExternalInterface.call("sendReturn",tempStr).toString();
//3. setting up a callback function for javascript
ExternalInterface.addCallback("callFlash",flashResponse);
// argument 1: function name called by javascript, argument 2: function on the Flash side.
// AS2 version looks like this : ExternalInterface.addCallback("callFlash",null,flashResponse);

От JS:

//1. javascript function as called from Flash.
function sendData(val){
    alert(val);
    document.flashForm.flashOutput.value = val;
}

//2. javascript function with recursion.
function sendReturn(val){
    var tempData = "Hello from JS";
    return tempData + ' :return';
}

//3. calling Flash function with javascript.
function sendToFlash(val){
    window['flash'].callFlash(val);
}
2 голосов
/ 18 ноября 2008

Ах, вот ответ на ваш вопрос.

<form>
    <input type="button" onclick="callExternalInterface(id)" value="Call ExternalInterface" />
</form>
<script>
function callExternalInterface(id) {
    thisMovie("externalInterfaceExample").callAS(id);
}

function thisMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName]
    }
    else {
        return document[movieName]
    }
}
</script>

ТАК, если клиент Internet Explorer, вы должны извлечь фильм из объекта документа. : -)

0 голосов
/ 16 июня 2009

Если ваш код работает во всех браузерах, кроме Internet Explorer, стоит поспорить, что Flash Player для IE - это плагин ActiveX. Я где-то читал, что ActiveX взаимодействует в формате .NET, а внешний API Flash - в XML.

Я также пытаюсь научиться работать с Javascript-Flash в Internet Explorer, поэтому буду держать вас в курсе всего, что я узнал.

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

Вы можете позвонить напрямую:

playSwf.remote('sendResult', result, plays, name)

Конечно, sendResult необходимо зарегистрировать с помощью ExternalInterface.addCallback() в коде AS и файл флэш-памяти должен быть полностью загружен (в противном случае все вызовы не будут выполнены).

Пример можно найти в этом репозитории github (fancyupload) : as3proj содержит источник AS, удаленные вызовы JS находятся в Swiff.Uploader.js .

0 голосов
/ 20 ноября 2008

Может быть, это поможет вам, похоже, похожая проблема, но с использованием swfobject.

http://blog.deconcept.com/swfobject/forum/discussion/1064/swfobject-21-problems-with-externalinterface-in-ie/

Удачи.

0 голосов
/ 20 ноября 2008

Хотел опубликовать этот ответ, так как это может быть тем, что вызывает проблемы у других, очевидно, это не вызывает вашу проблему Все еще ищу решение вашей проблемы.

Из Документов MooTools: http://mootools.net/docs/Utilities/Swiff Примечание:

SWF-файл должен быть скомпилирован с компонентом ExternalInterface. См. Документацию Adobe по внешнему интерфейсу для получения дополнительной информации.

Action Script 2.0

import flash.external.*;

Action Script 3.0

package com
{
   import flash.external.ExternalInterface;
   public class Main 
   {
   }
}
...