2011-10-26 3 views
1

JavaScript에서 ActionScript의 함수를 호출하려고하는데, 다른 플래시 파일과 함께이 작업을 성공적으로 수행했지만 현재 어떤 이유로 든 실패하고 있습니다. 내가 jQuery를 SWFEmbed를 사용하고,이 내 JS 코드 :ExternalInterface 콜백이 작동하지 않습니다.

$.ajax({ 
     url: '<?php echo $html->url(array('controller' => 'voicenotes', 'action' => 'get_url'), true);?>' + '/' + container.children('#VoicenoteVnid').val(), 
     dataType: 'json', 
     type: 'POST', 
     success: function(response) { 
      container.children('.voicenote-info').children('.player').addClass('active'); 
      flashMovie = container.children('.voicenote-info').children('.player'); 
      alert(flashMovie.html()); 
      flashMovie.flash({ 
      swf: '<?php echo $html->url('/files/flash/reproductor_compact.swf',true); ?>', 
      width: 240, 
      height: 40, 
      quality: "high", 
      wmode: "transparent", 
      allowscriptaccess: "always", 
      }); 
      alert($('.player.active > object')[0].callIt()); 
     }    
     }); 

그리고 여기에 내 코드,이 내 생성자입니다 :

public function reproductor() 
     { 
      ExternalInterface.addCallback("callIt", test); 
      ExternalInterface.call("alert", "Que fue?"); 
      trace(ExternalInterface.available); 
     } 

을 그리고이 제 기능입니다 :

private function test():String { 
      return "this is a test"; 
     } 

ExternalInterface.call이 작동하고 추적 결과가 true로 출력됩니다. 무슨 일이 일어나는지 전혀 알지 못합니다.

P.S : ExternalInterface 콜백에 매개 변수를 전달할 수있는 방법을 알려 주시면 감사하겠습니다.

+0

다음 [스택 오버플로 대답] (http://stackoverflow.com/questions/7657842/how-to-call-flash-actionscript-callback-method-from-javascript/7657994# 7657994) 특정 문제의 원인이 될 수 있습니다. –

답변

2
  1. SWF 개체를 찾으려면 Jquery 선택기가 잘못되었을 수 있습니다. 다른 방법으로 디버깅을 시도해보십시오.
  2. SWF가 완전히로드되기 전에 AS3 함수를 호출하는 것일 수 있습니다. Ajax라는 외부 사이트의 버튼에 함수 호출 (callIt)을 배치하고 경고가 발생한 후에 눌러야합니다.

는 JS로 보내, 콜백 함수 내에서 PARAM을 받고, 콜백 함수에서 인자로받을 수 있습니다. 예 :

$('.player.active > object')[0].callIt("LOLSOME") 

... 

ExternalInterface.addCallback("callIt", test); 
private function test(arg:String):String { 
     return "param received from JS: " + arg; 
} 
+0

예, 문제가있는 것 같습니다. SWF에서 JS에서 함수를 호출하기 전에 SWF를 인스턴스화해야하며 코드 블록 인 'ExternalInterface.addCallback' 메서드가 실행되어야합니다. 가능한 빨리 JS 메서드를 호출하려는 경우 SWF에서'addCallback'을 실행하자마자 Flash에서 JS로 메소드를 실행시킬 수 있습니다. 오랫동안 allowScriptAccess가 활성화되어 있습니다. – gthmb

+0

이것은 문제입니다. Marcelo, 지금 협상 해주세요.이 메서드는 재생하려는 .mp3 파일의 URL을로드하는 것입니다 (이것은 오디오 플레이어입니다). flashvars는 잘 작동하지만, 다음에 재생할 때 파일 하나를 재생하면 캐시에서 플레이어를 가져 와서 재생 한 첫 번째 파일을 재생하므로 ExternalInterface 호출이 재생됩니다. 여러분은 아이디어를 가지고 있고, 내 사이트는 보이스 노트 (voicenotes) 스트림을 가지고 있습니다. 그리고 내가 클릭 할 때마다 플레이어는 그것을 인스턴스화합니다. – 8vius

+0

@ 8vius, 문제를 더 잘 설명하지 않으시겠습니까? 나는 그것을 얻지 못했다. 노래를 부르는 방법이 필요하며 JS를 통해 매개 변수를 사용하여 노래를 선택하는 방법이 필요합니다. 우선적으로 하나의 SWF 만 사용하십시오. –

관련 문제