|
|
|||||
Регистрация: May 2008
Сообщений: 25
|
IYAKOV
Ща нет мануала под рукой но у ExternalInterface есть два метода: 1. call("myFunction","param") вызывает у яваскрита функчию myFunction("param"); 2. чето типа setCallBack("NameInJS", Funcion ); После этого в JavaScript скрипте создаеться функция NameInJS. Погугли про это в сети много чего написано. Ещё один маленький нюанс, необходимо разрешить использование ExternalInterface. Для этого в теге HTML swLifeConnect = true. Гугли в общем Что забавно у меня этот интерфейс работает только по сети... |
|
|||||
listener
|
Цитата:
<invoke name="sayHello" returntype="xml"><arguments><string>browser</string></arguments></invoke> В реквест можно запихать и Number и Array и Object.. в xml все будет разложено по полочкам-нодам. Осталось его распарсить.... //C# - код private void axShockwaveFlash1_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e) { XmlDocument document = new XmlDocument(); document.LoadXml(e.request); XmlNode invoke = document.FirstChild; string func = invoke.Attributes.GetNamedItem("name").Value; XmlNodeList list = document.GetElementsByTagName("arguments"); string arg = list[0].FirstChild.InnerText; MessageBox.Show(e.request); textBox.Text = "Function invoked: "+ func + ", argument: " + arg; } Цитата:
Вызов каллбак-функции во флэше из оболочки тоже не представляет трудностей. Опять же, в качестве аргумента передавайте xml-request. ______________________________ По поводу GetVariable. Значение поля AS-класса я не пробовал вытаскивать, но переменная прикрепленная к клипу на сцене (свойство клипа) вытаскивается легко (в AS2): GetVariable("mc.my_varproperty"); На AS3 нет возможности проверить. За безопасность не скажу, у меня все работало без дополнинтельных телодвижений. Просто впихивается флэш-контрол на форму и понеслось. Последний раз редактировалось alexcon314; 28.06.2008 в 03:13. |
|
|||||
Цитата:
|
|
|||||
listener
|
Про каллбаки:
//C# вызывающий код axShockwaveFlash1.CallFunction("<invoke name=\"myFlashFunction\" returntype=\"xml\"><arguments><string>my_arg</string></arguments></invoke>"); //Flash принимающий код import flash.external.*; ExternalInterface.addCallback("myFlashFunction", null, myFunction); function myFunction(arg) { out.text += newline + arg; } |
|
|||||
Да, конечно, все уже работает. еще раз спасибо.
Цитата:
Факт: Если запросить переменную из флеш-объекта - будет ошибка: Но если сделать это вот так, то все будет хорошо: Значит функция работает и делает свое дело. А есть какой-нибудь способ вывести все переменные из флеш-объекта? Последний раз редактировалось IYAKOV; 29.06.2008 в 10:24. |
|
|||||
listener
|
С классами все аналогично, если переменная-поле экземпляра класса инициализировалась - вы ее получите, по тому же синтаксису. (Проверял.)
Цитата:
Пишите во флэше этакий "трэйс-снапшот" (for..in) всех переменых в формате "адрес-значение", вызывайте его и отдавайте в оболочку результат. Цитата:
Последний раз редактировалось alexcon314; 30.06.2008 в 08:35. |
|
|||||
Цитата:
|
|
|||||
listener
|
Действительно, в AS3 GetVariable не вытаскивает так просто переменные из полей классов. Причина, видимо, кроется в отсутствии рута. Впрочем, я сильно этот вопрос не пробивал. Нашел более логичный и естественный, на мой взгляд, способ.
Просто в классе (в любом, и в DocumentClass в т.ч.) делаются обычные get(set если хотите) методы. И их надо зарегить ExternalInterface.addCallback'ом, чтобы они были доступны со стороны оболочки. Модификаторы доступа, видимо, не имеют значения в этом случае. В частности, приват-метод будет все равно доступен из оболочки после регистрации его как Callback. //AS3 package { import flash.display.Sprite; import flash.external.*; public class Main extends Sprite { public var testNum:Array; public function Main() { this.testNum=[3,2]; ExternalInterface.addCallback("get_testNum", this.get_testNum); } private function get_testNum():Array { return testNum; } } } //C# string var = axShockwaveFlash1.CallFunction("<invoke name=\"get_testNum\" returntype=\"xml\"><arguments></arguments></invoke>"); //var получит значение '<array><property id="0"><number>3</number></property><property id="1"><number>2</number></property></array>' Последний раз редактировалось alexcon314; 10.07.2008 в 09:00. |
|
|||||
Цитата:
Цитата:
Цитата:
|
|
|||||
listener
|
Цитата:
Последний раз редактировалось alexcon314; 10.07.2008 в 17:03. |
Часовой пояс GMT +4, время: 12:58. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|