2008-11-18 2 views
8

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

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

Это все прекрасно работает в FireFox, Safari и Opera, но я получаю «неопределенный» ошибка в Internet Explorer 6 и 7. Я попытался с помощью стандарта трясины:

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

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

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

+1

Вы используете as2 или as3? – picardo

ответ

5

Я не знаком с плагином 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); 
} 
+0

Это именно то, что я пробовал с: window ['flash']. SendResult (результат, пьесы, имя); Как вы ссылаетесь на свой флеш-объект? window ['flashname/flashid'] –

+0

Ах, конечно. Должен быть другой способ захвата этого в IE. Возможно, что-то вроде window.document.name ... не уверен в этом. – picardo

+0

Попробуйте window.document.getElementsByName ('flashname'). – picardo

2

Ах, вот ответ на вас проблемы.

<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> 

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

+0

Это то, что я пробовал и все еще не буду работать. –

+0

Какие ошибки вы получаете? Эти решения кажутся здоровыми, интересно, есть ли другие факторы, вызывающие проблемы. – discorax

0

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

Из MooTools Docs: 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 
    { 
    } 
} 
0

Вы можете назвать это непосредственно:

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

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

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

0

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

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