CallFunction(Request: String): String;
CallFunction(Request: String): String;
Request. XML-строка, с помощью которой указана выполняемая функция и ее параметры.
Метод CallFunction выполняет функцию, реализованную в загруженном флэш-объекте, и возвращает результат ее выполнения.
Взаимодействие флеш-объектов с контейнерами, в которых они отображаются, в ActionScript осуществляется через специальный класс - ExternalInterface. Для вызова какой-либо функции, реализованной в ActionScript-коде, данная функция должна быть зарегистрирована в классе ExternalInterface. Регистрации осуществляется с помощью метода ExternalInterface.addCallback.
Для вызова ActionScript-кода с помощью метода CallFunction в качестве параметра Request необходимо указать XML-строку, содержащую наименование функции и значения ее параметров, сериализованные в специальном формате. В общем виде формат XML-строки выглядит следующим образом:
<invoke name="functionName" returntype="xml">
<arguments>
//Отдельные значения параметров
</arguments>
</invoke>
Корневая вершина «Invoke» содержит два атрибута: name - наименование функции, под которым она зарегистрирована с помощью метода ExternalInterface.addCallback; returntype - возвращаемый методом CallFunction тип значения. В качестве значения атрибута всегда указывается "xml".
Отдельные значения параметров указываются в специальном формате, содержащем информацию о типе данных в дополнении с фактическим значением:
ActionScript класс/значение | Формат | Комментарии |
null | <null/> | |
Логическое True | <true/> | |
Логическое False | <false/> | |
String | <string>Значение</string> | |
Number, int, uint | <number>Значение</number> | |
Array (элементы могут быть различных типов) |
<array> <property id="0"> <number>Значение</number> </property> <property id="1"> <string>Значение</string> </property> ... </array> |
Вершина «property» определяет отдельный элемент массива, а атрибут «id» определяет индекс элемента. Индекс указывается начиная с нуля. |
Object |
<object> <property id="Property1"> <string>Значение</ String> </property> <property id="Property2"> <string>Значение</String> </property> ... </object> |
Вершина «property» определяет отдельные свойства объекта, а атрибут «id» определяет наименование этих свойств. |
Другие встроенные или пользовательские классы |
<null/> или <object> </object> |
ActionScript кодирует другие объекты как значение null, либо как пустые объекты. В любом случае какие-либо значения свойств будут потеряны. |
Результатом работы метода CallFunction будет XML-строка, содержащая результат выполнения указанной функции флеш-объекта. Данная строка также будет содержать информацию о типе данных в дополнении с фактическим значением.
Для выполнения примера предполагается наличие формы, расположенного на ней компонента FlashBox с наименованием «FlashBox1» и двух кнопок с наименованиями «Button1» и «Button2». В «FlashBox1» загружен swf-файл, содержащий в своей реализации следующий код:
//...
function Run(): void
{
//...Код функции на ActionScript;
}
function TestFunc(i1,i2: int): Number
{
var i3: Number = i1 * i2 / (i1 + i2);
return i3;
}
ExternalInterface.addCallback("TestRun", Run); //В контейнерах для флеш-объекта функция будет доступна с наименованием TestRun
ExternalInterface.addCallback("TestFunc", TestFunc); //В контейнерах для флеш-объекта функция будет доступна с наименованием TestFunc
//...
Для запуска указанных функций во время выполнения формы реализуем две процедуры для обработки события OnClick кнопок:
Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Var
Request: String;
Begin
Request := ("<invoke name=""TestRun"" returntype=""xml""/>");
FlashBox1.CallFunction(Request);
End Sub Button1OnClick;
Sub Button2OnClick(Sender: Object; Args: IMouseEventArgs);
Var
Request, Result: String;
Begin
Request := "<invoke name=""TestFunc"" returntype=""xml"">" +
"<arguments>" +
"<number>2</number>" +
"<number>6</number>" +
"</arguments>" +
"</invoke>";
Result := FlashBox1.CallFunction(Request);
End Sub Button2OnClick;
При нажатии на первую кнопку будет выполнена функция «Run» флеш-объекта. Данная функция не содержит параметров, поэтому вершина «arguments» в передаваемой XML-строке не указана.
При нажатии на вторую кнопку будет выполнена функция «TestFunc» флеш-объекта. В качестве значений параметров для данной функции будут указаны значения «2» и «6». Результатом выполнения данной функции будет значение «1,5». Метод CallFunction вернет данное значение, представленное в виде XML-строки: <number>1.5</number>.
Для выполнения примера предполагается наличие .NET-формы, расположенного на ней компонента FlashBoxNet с наименованием «FlashBoxNet1» и двух кнопок с наименованиями «Button1» и «Button2». В «FlashBoxNet1» загружен swf-файл, содержащий в своей реализации код, указанный в примере Fore выше.
Для запуска функций флеш-объекта во время выполнения формы реализуем две процедуры для обработки события Click кнопок:
Private Sub button1_Click(sender: System.Object; e: System.EventArgs);
Var
Request: String;
Begin
Request := ("<invoke name=""TestRun"" returntype=""xml""/>");
FlashBoxNet1.CallFunction(Request);
End Sub;
Private Sub button2_Click(sender: System.Object; e: System.EventArgs);
Var
Request, Result: String;
Begin
Request := "<invoke name=""TestFunc"" returntype=""xml"">" +
"<arguments>" +
"<number>2</number>" +
"<number>6</number>" +
"</arguments>" +
"</invoke>";
Result := FlashBoxNet1.CallFunction(Request);
End Sub;
При нажатии на первую кнопку будет выполнена функция «Run» флеш-объекта. Данная функция не содержит параметров, поэтому вершина «arguments» в передаваемой XML-строке не указана.
При нажатии на вторую кнопку будет выполнена функция «TestFunc» флеш-объекта. В качестве значений параметров для данной функции будут указаны значения «2» и «6». Результатом выполнения данной функции будет значение «1,5». Метод CallFunction вернет данное значение, представленное в виде XML-строки: <number>1.5</number>.
См. также: