0

어이, 그래서 나는 그것을 자주 사용하기 때문에 ExternalInterface가 이상하게 작동하는 데 많은 어려움을 겪고있다.ExternalInterface

내가 너무 오랫동안보고 있었으므로 놓친 것 같습니다.

flash_ready 함수가 올바르게 objectID를 반환하고 있으며 내가 말할 수있는 한 모든 것이 순서대로 처리됩니다.

불행히도 실행할 때 기본적으로 document.getElementById (<movename>) .test()가 유효한 방법이 아니라는 오류가 표시됩니다 (브라우저에 따라 다름). 여기

코드이다 :

자바 스크립트 (생성)

function flash_ready(i){ 
    document.getElementById(i).test('success!'); 
} 

삽입 HTML :

<script type="text/javascript"> 
    swfobject.embedSWF("/chainmaille/includes/media/flash/upload_image.swf", "/chainmaille/includes/media/flash/upload_image", "500", "50", "9.0.0","expressInstall.swf", {}, {allowScriptAccess:'always', wmode:'transparent'},{id:'uploader_flash',name:'uploader_flash'}); 
</script> 
<object type="application/x-shockwave-flash" id="uploader_flash" name="uploader_flash" data="/chainmaille/includes/media/flash/upload_image.swf" width="500" height="50"><param name="allowScriptAccess" value="always"><param name="wmode" value="transparent"></object> 

AS3 :

package com.jesseditson.uploader { 

    import flash.display.MovieClip; 
    import flash.external.ExternalInterface; 
    import flash.system.Security; 

    public class UI extends MovieClip { 

    // Initialization: 
    public function UI() { 
     Security.allowDomain('*'); 
     ExternalInterface.addCallback("test", test); 

     var jscommand:String = "flash_ready('"+ExternalInterface.objectID+"');"; 
     var url:URLRequest = new URLRequest("javascript:" + jscommand + " void(0);"); 
     navigateToURL(url, "_self"); 
    } 

    public function test(t){ 
     trace(t); 
    } 
    } 
} 
Swfobject 구글 코드를 통해 포함되는

, 그리고 th 플래시는 문제가되지 않습니다.

다른 서버에서 작동하는 설정이 매우 비슷하지만이 설정이 작동하지 않는 것 같습니다. 그것은 Hostgator 공유 서버입니다. 서버의 결함 일 수 있습니까? 누구든지 명백한 구문 문제를 보았습니까? 사전에

감사합니다!

+0

그것은 수 없습니다 도움이? –

+0

플래시 (flash)가로드 될 때까지는 test_ (t)가 호출되지 않습니다. flash_ready() 함수는 플래시 자체에서 호출되기 때문입니다. 그게 의미가 있는지 모르겠지만 여기에 흐름이 있습니다 : UI가 인스턴스화 됨 -> 생성자 (UI) -> flash_ready()가 -> test()를 호출했습니다 사실 플래시는 javascript를 통해 테스트 함수를 호출하므로 테스트가 정의되어야합니다. 네? – Jesse

+0

모든 브라우저에서이 작업을 수행합니까? 나는 때때로 철저하게 IE에서 결함을 얻는다. –

답변

1

추가 조사 후 라이트 박스에 복제했기 때문에 플래시 개체가 여러 개있는 경우 문제가있는 것처럼 보입니다. 나는 지금 일하고있다.

0

flash_ready가 예상 한 objectID를 수신합니까? 이가 그렇게 할 수 있도록 설계되었습니다

var jscommand:String = "flash_ready('"+ExternalInterface.objectID+"');"; 
var url:URLRequest = new URLRequest("javascript:" + jscommand + " void(0);"); 
navigateToURL(url, "_self"); 

:

ExternalInterface.call("flash_ready", ExternalInterface.objectID); 
+0

flash_ready는 호출 메소드를 사용할 때 기대했던 객체를 받고 있습니다. 이전에 성공했기 때문에이 코드는 분명히 추가되었습니다. 완료되지 않으면이 문제를 해결하자마자 ExternalInterface로 호출을 이동합니다. 감사! – Jesse

0

포스트 소스 (사전 generatred)를 사용하는 이유 또한

. 브라우저가 [Flash] .Method가 함수가 아니라고 말하면 99 %는 .swf가 준비되기 전에 Flash에서 함수를 호출하려고 한 것을 의미합니다. 나는 당신이 그렇게하려고 노력했음을 알지만, 그것이 작동하지 않는다는 것을 분명히 알았습니다. 미리 렌더링 된 소스를 게시하면 문제를 찾을 수있을 것입니다.

1

플래시가 실제로 아직 구성되지 않았습니다. 생성자에서 flash_ready 콜백을 호출하고 있으므로 JS가 객체가 스테이지에 오기 전에 호출하려고합니다. flash_ready 전화를 Event.ADDED_TO_STAGE 수신기로 이동하면 작동이 시작됩니다.

1

방금 ​​5 시간을 보냈습니다. 모두 정말 실망 스러웠습니다. 제 경우에는 해결책이 매우 간단했고 결코 그것을 짐작하지 않았을 것입니다. 브라우저 내부의 파일에서 Flash Player 디버거가 실행되는 것을 본 적이없는 분이라면 먼저 this link that walks you through the setup이라는 마법을 발견하게됩니다. 이제 내 ExternalInterface 검색에 동일한 도메인 내에 샌드 박스가 있습니다.이는 플래시가 yourdomain.com에서 www.yourdomain.com에 액세스 할 수 없음을 의미합니다. 물론 이상한 것은 ExternalInterface를 사용하여 명시 적으로 도메인을 호출하지 않는다는 것입니다. 어쨌든, 솔루션은 매우 간단했습니다. 이것을 .htaccess 파일에 추가하면됩니다.

# Redirect non-www to www 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule (.*) http://www.youtdomain.com/$1 [R=301,L] 

희망이`테스트 (t)를 호출의 시간 '이 정의되지 않았는지, 누군가