2013-03-29 2 views
2

Я уже здесь и не могу найти ответ. У меня есть .swf, сидящий на HTML-странице, и я пытаюсь вызвать функцию внутри него из javascript. Я могу поговорить из флеш-файла на javascript, но я не могу заставить его заговорить. Я знаю, что я правильно нацеливаю объект, потому что я использую console.log() на нем и подтверждаю, на что он нацелен.Невозможно вызвать функцию флэш-памяти из Javascript

Я запускаю тест со вспышки, вызывая функцию javascript изнутри .swf, и эта функция вызывает внутреннюю функцию Flash.

вспышки Код:

//adds callback 
ExternalInterface.addCallback("sendToFlash", flashTalkedTo); 

//function called by the callback 
public function flashTalkedTo():void{ 
    //runs another function in javascript to log a string 
    ExternalInterface.call("callMe") 
} 

//calls javascript that tries to talk to Flash 
ExternalInterface.call("catchFromFlash") 

Javascript Код:

//function called by Flash that initiates 
function catchFromFlash(){ 
    talkToFlash() 
} 

//function that tries to talk to flash 
function talkToFlash(){ 
    document.getElementById('Noodleverse').sendToFlash() 
} 

//function called by Flash in the end to confirm call made 
function callMe(){ 
    console.log("Call Me") 
} 

Любая помощь работает, спасибо!

+2

, в каком HTML-элементе есть идентификатор 'Noodleverse'? Показ грубой структуры HTML поможет. – Dave

+0

И также выполните 'console.log (document.getElementById ('Noodleverse'))' inside' talkToFlash', чтобы подтвердить, что он действительно работает, и что он находит правильный элемент. –

ответ

1

Flash, и плагины в целом, немного странно. Они не ведут себя как обычные элементы, и их функции не ведут себя как обычные функции. Например, вы не можете сохранить элемент в значение и вызвать из него функцию. Вы также должны быть осторожны, потому что в некоторых браузерах используется object, а в других используется embed.

Лучший способ вызова функции - использовать swfobject (https://code.google.com/p/swfobject/), чтобы абстрагировать все. Лично хотя, я использую это (на основе опыта, может быть, кто-то может предложить улучшения):

HTML:

<object id="myplugin" ...> 
    ... 
    <embed name="myplugin" ... /> 
</object> 

JavaScript:

var o1=document.myplugin; 
if(o1&&!!o1.myFlashFunction){ 
    return document.myplugin.myFlashFunction(); // DO NOT USE o1 here. It will fail. 
} 
var o2=window.myplugin; 
if(o2&&!!o2.myFlashFunction){ 
    return window.myplugin.myFlashFunction(); // DO NOT USE o2 here 
} 

Первый случай (document) для самой новой браузеры. Например, Chrome найдет объект embed. Второй() предназначен для IE и находит object (IE, по крайней мере, старый IE, игнорирует embed). Я не уверен на 100%, что второй нужен, потому что IE может также работать с document, поэтому назовите этот код вуду. Кроме того, window.myplugin предоставит массив всех соответствующих элементов в Chrome, FireFox и т. Д. (Но мы ожидаем, что они уже позаботятся)

+0

Я сделал console.log() на кусок, делающий звонок, и он отлично работает. Я надеюсь не использовать SWFObject, так как я его уже пробовал, и это дало мне проблемы с компоновкой. – user2225288

+0

@ user2225288, так что ... у вас все еще есть проблема? Вы пробовали код, который я разместил? – Dave

Смежные вопросы