cs3의 구현 방법:
이 기능을 구현하려면 as에서 externalinterface 클래스를 사용해야 합니다.
as 문서에서 찾을 수 있습니다
p>외부 컨테이너에 대한 정보 가져오기
ExternalInterface.available 속성은 현재 Flash Player가 외부 인터페이스를 제공하는 컨테이너에 있는지 여부를 나타냅니다. 외부 인터페이스를 사용할 수 있으면 이 속성은 true이고, 그렇지 않으면 false입니다. ExternalInterface 클래스의 다른 기능을 사용하기 전에 항상 다음과 같이 현재 컨테이너가 외부 인터페이스 통신을 지원하는지 확인해야 합니다.
if (ExternalInterface.available)
{< /p>
//여기서 ExternalInterface 메서드 호출을 실행합니다.
}
참고
ExternalInterface.available 속성은 현재 컨테이너가 외부 인터페이스 연결을 지원하는 컨테이너 유형인지 여부를 보고합니다. 현재 브라우저에서 JavaScript가 활성화되어 있는지 여부는 보고되지 않습니다.
ExternalInterface.objectID 속성(구체적으로 Internet Explorer의 개체 태그의 id 속성 또는 NPRuntime 인터페이스를 사용하는 브라우저의 id 속성)을 사용하여 Flash Player 인스턴스의 고유 식별자를 확인할 수 있습니다. 태그의 이름 속성을 삽입하세요). 이 고유 ID는 브라우저의 현재 SWF 문서를 나타내며, 예를 들어 컨테이너 HTML 페이지에서 JavaScript 함수를 호출할 때 SWF 문서를 참조하는 데 사용할 수 있습니다. Flash Player 컨테이너가 웹 브라우저가 아닌 경우 이 속성은 null입니다.
ActionScript에서 외부 코드 호출
ExternalInterface.call() 메서드는 컨테이너 애플리케이션에서 코드를 실행합니다. 컨테이너 애플리케이션에서 호출할 함수의 이름이 포함된 문자열인 인수가 하나 이상 필요합니다. ExternalInterface.call() 메서드에 전달된 다른 모든 인수는 함수 호출에 대한 인수로 컨테이너에 전달됩니다.
// 외부 함수 "addNumbers" 호출
// 두 개의 매개변수를 전달하고 함수 결과를 "result" 변수에 할당합니다.
var param1 :uint = 3;
var param2:uint = 7;
var 결과:uint = ExternalInterface.call("addNumbers", param1, param2 );
컨테이너가 HTML 페이지인 경우 이 메소드는 지정된 이름으로 JavaScript 함수를 호출합니다. 이 함수는 포함하는 HTML 페이지의 스크립트 요소에 정의되어야 합니다. JavaScript 함수의 반환 값은 ActionScript로 다시 전달됩니다.
// 두 숫자를 더하고 결과를 다시 ActionScript로 보냅니다.
function addNumbers(num1, num2) p>
{
return (num1 + num2);
}
컨테이너 For 다른 ActiveX 컨테이너의 경우 이 메서드를 사용하면 Flash Player ActiveX 컨트롤이 해당 FlashCall 이벤트를 전달하게 됩니다. Flash Player는 지정된 함수 이름과 모든 매개 변수를 XML 문자열로 직렬화합니다. 컨테이너는 이벤트 개체의 요청 속성에 있는 이 정보에 액세스하고 이를 사용하여 자체 코드를 실행하는 방법을 결정할 수 있습니다. ActionScript에 값을 반환하기 위해 컨테이너 코드는 ActiveX 객체의 SetReturnValue() 메서드를 호출하고 결과(XML 문자열로 직렬화됨)를 메서드의 인수로 전달합니다. 이 통신에 사용되는 XML 형식에 대한 자세한 내용은 외부 API용 XML 형식을 참조하세요.
컨테이너가 웹 브라우저이든 다른 ActiveX 컨테이너이든 호출이 실패하거나 컨테이너 메서드가 반환 값을 지정하지 않는 한 null이 반환됩니다. 포함된 환경이 호출 코드가 액세스할 수 없는 보안 샌드박스에 속하는 경우 ExternalInterface.call() 메서드는 SecurityError 예외를 발생시킵니다. 이 문제는 포함 환경에서 AllowScriptAccess에 대한 적절한 값을 설정하여 해결할 수 있습니다. 예를 들어 HTML 페이지에서 AllowScriptAccess 값을 변경하려면 object 및 embed 태그에서 해당 속성을 편집합니다.
컨테이너에서 ActionScript 코드 호출
컨테이너는 다른 ActionScript 코드가 아닌 함수 내의 ActionScript 코드만 호출할 수 있습니다. 컨테이너 응용 프로그램에서 ActionScript 함수를 호출하려면 두 가지 작업, 즉 외부 인터페이스 클래스에 함수를 등록한 다음 컨테이너의 코드에서 호출해야 합니다.
먼저 ActionScript 함수를 등록해야 하며 이는 컨테이너에서 해당 함수를 사용할 수 있음을 나타냅니다. 다음과 같이 ExternalInterface.addCallback() 메소드를 사용하십시오:
function callMe(name:String):String
{
return "busy signal";< / p>
}
ExternalInterface.addCallback("myFunction", callMe);
addCallback() 메서드는 두 개의 매개변수를 사용합니다. 첫 번째 매개변수는 String 유형의 함수 이름입니다. 컨테이너는 이 이름을 사용하여 호출할 함수를 파악합니다. 두 번째 매개변수는 컨테이너가 정의된 함수 이름을 호출할 때 실행될 실제 ActionScript 함수입니다. 이러한 이름은 서로 다르기 때문에 실제 ActionScript 함수의 이름이 다른 경우에도 컨테이너에서 사용할 함수 이름을 지정할 수 있습니다. 이는 함수 이름을 알 수 없는 경우에 특히 유용합니다. 예를 들어 익명 함수가 지정되었거나 호출할 함수를 런타임에 결정해야 하는 경우입니다.
ExternalInterface 클래스에 ActionScript 함수가 등록되면 컨테이너가 실제로 함수를 호출할 수 있습니다. 이 작업을 수행하는 정확한 방법은 컨테이너 유형에 따라 다릅니다.
예를 들어, 웹 브라우저의 JavaScript 코드에서 ActionScript 함수는 마치 Flash Player 브라우저 객체의 메서드(즉, 객체 또는 embed 태그를 나타내는 JavaScript 객체의 메서드)인 것처럼 등록된 함수 이름을 사용하여 호출됩니다. 즉, 로컬 함수를 호출하는 것처럼 매개변수가 전달되고 결과가 반환됩니다.
// callResult는 "busy signal" 값을 얻습니다.
var callResult = flashObject.myFunction("my name" );
...
.. .
또는 데스크톱 애플리케이션에서 실행되는 SWF에서 호출할 때 파일의 ActionScript 함수, 등록된 함수 이름 및 모든 매개변수는 XML 형식 문자열로 직렬화되어야 합니다. 그런 다음 XML 문자열을 매개 변수로 사용하여 ActiveX 컨트롤의 CallFunction() 메서드를 호출하여 실제로 호출을 수행합니다. 이 통신에 사용되는 XML 형식에 대한 자세한 내용은 외부 API용 XML 형식을 참조하세요.
두 경우 모두 ActionScript 함수의 반환 값은 호출자가 브라우저의 JavaScript 코드이고 호출자가 ActiveX 컨테이너인 경우 값으로 직접 컨테이너 코드에 다시 전달됩니다. XML 형식 문자열로 직렬화됩니다.