2012-08-10 4 views
0

이 주제에 관해 이미 많은 질문이 있지만 그 중 어느 것도 내 문제를 해결하지 못했을 것입니다.var를 AS3으로 보내려고 할 때 Javascript가 오류를 throw합니다 ExternalInterface

어쨌든, 여기에 거래가 있습니다. 나는 약간의 오디오 및 사운드에 영향을 미치는 즐거운 작은 html5 게임을 가지고 있으며 html5를 지원하는 모든 브라우저에서 훌륭하게 작동합니다. 그러나 플래시 폴백을 필요로하지 않는 제품. 별거 아니야? 분명히 아닙니다 ... 나는 JS에서 mp3 URL을 받아 들여야하는 작은 swf를 만든 다음 mp3를 가져 와서 재생합니다. 많은 오디오 파일이 있기 때문에이 방법을 사용해야하며 각 파일에 대해 swf 파일을 만들지 않으려 고합니다.

여기가 AS입니다. ExternalInterface를 사용하여 js에서 변수를 수신하고 있습니다.

import flash.external.*; 

ExternalInterface.addCallback("callFlash", playSound); 

function playSound(file:String):void { 
    var s:Sound = new Sound(); 
    s.load(new URLRequest(file)); 

    s.play(); 
} 

그리고 내 JS

변수 전달하려면 :
var flash = $('#fbplayer')[0]; 
console.log(flash); //returns flash object so jquery is not the issue 
flash.callFlash(fallSource); 

그래서 이론적으로 모든 것이 잘 작동합니다을 (I 제대로 ExternalInterface를 이해하는 경우). 그러나 다음과 같은 오류가 발생합니다.

TypeError: flash.callFlash is not a function 
flash.callFlash(fallSource); 

문제가 발생한 곳을 찾을 수 없습니다. 나는 답변을하거나 심지어 완전히 다른 방법을 사용합니다. 프로젝트의 배달을 기다리는 동안 작동하는 한 : C

고마워!

+0

페이지에 두 개 이상의 플래시 개체가 있습니까? –

+0

jQuery가 jQuery 객체를 반환하지 않도록 페이지에 하나의 플래시 객체 만 있지만 [0]을 사용하면 jQuery 객체가 반환되지 않습니다. - var flash = $ ('# fbplayer') [0]; [0] 강제로 jQuery가 객체를 가져옵니다. 내가 아는 한 적어도 ... – mattelliottIT

+0

(보통 'allowScriptAccess' embed param을 제외하고) 점프하는 유일한 다른 점은 JS가'ExternalInterface.addCallback() '이 실행되기 전에 JS가 Flash 함수를 호출하고 있다는 것입니다. –

답변

1

나는 이것이 정말로 오래되었음을 알고 있지만 jquery로 플래시 객체를 제대로 찾지 못했습니다. getElementById를 사용하는 것이 좋습니다. 또한 불과 몇 달 전에 일부 최신 브라우저에서 실행 한 또 다른 미친 문제는 실제로 Flash가 ExternalInterface를 통해 콜백을 초기화 한 후 프레임을 기다리라고 말할 필요가 있다는 것입니다.