컨테이너는 함수에 있는 ActionScript 코드만 호출할 수 있고 다른 ActionScript 코드는 호출할 수 없습니다. 컨테이너 응용 프로그램에서 ActionScript 함수를 호출하려면 ExternalInterface 클래스로 함수를 등록한 다음 컨테이너의 코드에서 호출해야 합니다.
먼저 ActionScript 함수를 등록하여 컨테이너에서 사용할 수 있도록 나타내야 합니다. 다음과 같이
ExternalInterface.addCallback()
메서드를 사용합니다.
function callMe(name:String):String
{
return "busy signal";
}
ExternalInterface.addCallback("myFunction", callMe);
addCallback()
메서드는 두 가지 매개 변수를 사용합니다. 먼저 문자열로 된 함수 이름에 의해 컨테이너에서 함수를 인식하게 됩니다. 두 번째 매개 변수는 컨테이너가 정의된 함수 이름을 호출할 때 실행될 실제 ActionScript 함수입니다. 이러한 이름은 고유하므로 실제 ActionScript 함수에 다른 이름이 있더라도 컨테이너에서 사용할 함수 이름을 지정할 수 있습니다. 이것은 함수 이름을 모르는 경우, 예를 들어 익명 함수가 지정되거나 호출할 함수가 런타임에 확인되는 경우에 특히 유용합니다.
ActionScript 함수는 ExternalInterface 클래스로 등록되었으므로 컨테이너에서 실제로 이 함수를 호출할 수 있습니다. 실행 방법은 컨테이너 유형에 따라 다양합니다. 예를 들어 웹 브라우저의 JavaScript 코드에서 ActionScript 함수는 Flash Player 브라우저 객체의 메서드(
object
또는
embed
태그를 나타내는 JavaScript 객체의 메서드)와 마찬가지로 등록된 함수 이름을 사용하여 호출됩니다. 즉, 로컬 함수가 호출되는 것처럼 매개 변수가 전달되고 결과가 반환됩니다.
<script language="JavaScript">
// callResult gets the value "busy signal"
var callResult = flashObject.myFunction("my name");
</script>
...
<object id="flashObject"...>
...
<embed name="flashObject".../>
</object>
또는 데스크톱 응용 프로그램에서 실행되는 SWF 파일에서 ActionScript 함수를 호출할 때 등록된 함수 이름 및 매개 변수를 XML 형식 문자열로 직렬화해야 합니다. 그러면 XML 문자열을 매개 변수로 ActiveX 컨트롤의
CallFunction()
메서드를 호출하는 방식으로 호출이 실제로 수행됩니다. 이 통신에 사용되는 XML 형식에 대한 자세한 내용은
외부 API의 XML 형식
을 참조하십시오.
두 경우 모두 ActionScript 함수의 반환 값은 다시 컨테이너 코드로 전달됩니다. 호출자가 브라우저의 JavaScript인 경우에는 직접 값으로 전달되고 호출자가 ActiveX 컨테이너인 경우에는 XML 형식 문자열로 직렬화되어 전달됩니다.