2014-10-28 3 views
0

그래서 ExternalInterface 호출에서 값을 반환하는 데 문제가 있습니다. 다음과 같은 코드 조각이 있습니다.ExternalInterface가 AS3에서 IE에서 일관되게 작동하지 않습니다.

var a:String = String(ExternalInterface.call("function() { var returnTest = 'test'; alert(returnTest); return returnTest;}")); 
ExternalInterface.call("alert", a); 

첫 번째 경고 (1 행의 익명 함수에서)가 정확합니다 (분명히). 그러나 2 번 줄의 경고는 IE10에서 90 %의 시간을 null로 반환합니다. Firefox에서는 매번 작동합니다.

시간의 90 %를 작동하는 것에 대해 더 자세히 설명하기 위해 무의미한 경고를 추가하거나 제거하여 작동 여부에 관계없이 주사위를 다시 굴릴 수 있습니다. 예를 들어 작동하지 않는다고 가정 할 때 경고를 추가하면 작업이 시작됩니다. 또는 작동 중이라면 디버깅을위한 경고를 추가 할 수 있으며 작동을 멈추고 경고를 제거한 후에도 경고가 다시 나타나고 다시 작동하기 시작합니다. 나는 이것이 일어나고있는 것이 아니라는 것을 안다. 그러나 경고가 추가되거나 제거 될 때마다 동전이 뒤집힌 것처럼 행동한다.

그리고이 모든 것은 IE에서만 발생하며 Firefox에서 매번 완벽하게 작동합니다.

감사합니다.

편집 : 내가 제공 한 코드는 작동해야하는 실제 코드가 아니라 문제가 어디에 있었는지 확인하기 위해 작성한 코드입니다. 실제 상황은 플래시가 실행중인 환경에서 JavaScript 속성을 사용해야한다는 것입니다.하지만 SWF가 실행될 HTML이나 JavaScript에 액세스 할 수는 없습니다. 실제 코드를 실행해야합니다. 다음과 같이하십시오 :

var pageNameFromJS:String = String(ExternalInterface.call("function() { var pageName = ServerObject.currentPage.name; alert(pageName); return pageName;}")); 
ExternalInterface.call("alert", pageNameFromJS); 

첫 번째 줄의 경고는 ServerObject.currentPage.name이 작동하는지 확인하는 것입니다. 두 번째 줄의 경고는 pageNameFromJS가 필요한 기능이 작동하지 않는 것을 발견했을 때 추가 된 디버그 코드입니다.

+0

som을 사용하여 시도하면 쓰레드를 걸지 않는 (예를 들어 경고를 사용하지 않고 html 요소의 텍스트를 추가하는 등) 100 % 시간이 걸리는가? AS3가 경고가 해제 될 때까지 기다리지 않는 것이 문제 일 수 있습니다. 그냥 야생 짐작하지만 – BadFeelingAboutThis

+0

이것은 ExternalInterface를 사용하는 비정상적인 방법입니다. 적어도이 방법을 사용하지는 않았습니다. 첫 번째 줄의 응답을 두 번째 줄의 매개 변수로 전달하는 이유가 확실하지 않습니다. JavaScript에 대한 호출을 이미 작성한 경우 모든 것을 한 번에 실행하지 않는 이유는 무엇입니까? 자바 스크립트 기능은 어떻게 생겼습니까? –

+0

나는 그 문제뿐만 아니라 내가 성취하려는 것을 더 잘 기술하기 위해 OP를 편집했다. LDMS : TextField 나 무언가의 색상을 변경하는 등 다른 변경 작업을 수행하면 "동전 던지기"도 가능합니다. – Surgery

답변

0

은 정말 당신이 이런 일을 복잡하게 이유를 잘 모릅니다;

당신은 그것을 할 수있는) 쉽게 :

AS3 코드 :

ExternalInterface.addCallback("flash_function", flash_function); 

function flash_function(from_js_param){ 
    trace('param received from js : '+from_js_param) 
} 

ExternalInterface.call("js_function", to_js_param) 

JS 코드 :

function js_function(from_flash_param){ 
    var to_flash_param = 'I received your '+from_flash_param; 
    (get_your_swf).flash_function(to_flash_param); 
} 
+0

고마워,하지만 왜 우리가 이런 식으로 할 수 없는지에 대한 더 많은 정보를 OP에 추가했습니다.기본적으로 환경에서 실행되는 HTML 또는 JavaScript에 액세스 할 수 없습니다. – Surgery

+0

아, 알겠습니다. js 코드 나 html 페이지에 대한 다른 정보를 알려주시겠습니까? – akmozo

+0

관련성이 있다고 할 말이 많지는 않습니다. XML에서 HTML 컨텐트를 생성하고 자체적으로 작은 환경 인 Kiosk 소프트웨어와 같은 종류의 로컬 서비스를 제공하는 사용자 정의 Java 기반 웹 서버입니다. – Surgery

관련 문제