![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Регистрация: Apr 2002
Адрес: Ukraine Kyiv
Сообщений: 51
|
прикол с функцикей джаваскрипта. вот эта самая функция setVariable() очень хитрая и непонятная.
пусть в документе, в котором вызывается мувик описана следующая функция: <script language="JavaScript"> <!-- var auxStr = "we***we***we***"; function ToFlash(Str) { window.document.setVariable("_root.infl.inFlash",Str); } //--> </script> далее, в мувике написан сценарий: _root.infl.Inflash = "Hi dudes!"; /*записываем в переменную inFlash, к-я есть переменная динамического текстового поля, которое мы сделали ручками и нажав f8 превратили в movieclip с именем infl*/ getUrl("javascript:ToFlash(auxStr)"); attachMovie("idText","Text",1); /*создаем экземпляр клипа, который есть также динамическое текстовое поле с переменной textVar*/ _root["Text"].textVar = _root.infl.Inflash; /*ну это понятно*/ в результате работы этого сценария на экране мувика будет два текстовых поля. причем созданное ручками будет показывать текстовую переменную джаваскрипта, а созданное сценарием поле будет отображать старое (!) значение переменной inFlash. получается функция setVariable не изменяет содержание переменной а использует ее в качестве ссылки?! или что? если это так, то как добраться до переменной джаваскрипта? кто-то может объяснить этот феномен? или я что-то тупить начинаю? скажите хоть что-нибудь, я уже с ума схожу от этой беды!!! помогитеее!!!
__________________
up the irons! |
|
|||||
|
Регистрация: Jun 1999
Адрес: Russia, Samara
Сообщений: 1,138
|
Hi !
есть предположение что во время задания textVar переменная еще не успела дойти из яваскрипта во флеш setVariable штука асинхронная и требует времени ![]() |
|
|||||
|
Регистрация: Apr 2002
Адрес: Ukraine Kyiv
Сообщений: 51
|
возможно это действительно связано со временем выполнения функции setVariable(). я попытался после ее вызова поставить цикл для задержки, типа:
p = 0; while (p < BolshoyeChislo) { p++; } не помогло. или оно и не могло помочь?
__________________
up the irons! |
|
|||||
|
Регистрация: Apr 2002
Адрес: Ukraine Kyiv
Сообщений: 51
|
вот еще одно наблюдение по теме. вот то текстовое поле, которое создаетя сценарием и куда я пытаюсь загнать импортированную переменную интересно себя ведет. я запустил эту всю беду. и вот что интересно. когда загрузилась страничка с мувиком, это текствовое поле уже было создано и заполнено текстом еще до того как на экране появился текст импортированный из JS. хотя заполнение того первого поля в сценарии стоит после этого с JS. а получается что хоть по тексту программы оно создаетя позже, на деле как раз все получается наоборот. в чем же дело? такое впечатление, что выполняются все методы флэша в первую очередь и только потом все остальное независимо от порядка следования в тексте программы. или я опять чего-то не понял?
__________________
up the irons! |
|
|||||
|
методы плеера исполняются после выполнения кода в кадре :)
тобишь если ты вызываешь каким либо способом (через фскоманды или гетурлом) какой либо метод плеера, жди результат его отработки не ранее чем плеер перейдет на следующий кадр :) уф типо того :)
__________________
2B||!2B? - That is the Question! |
|
|||||
|
http://www.ishlab.ru/simbeos/ - небольшие разработки на эту тему
там был случай когда я хотел возвращать переменную JS напрямую примерно так: function getJSVar(var) { temp=null fscommand("get","temp,var"); while(temp==null) {} return temp; } команда get в JS имела синтаксис if(command=="get") { ar = args.split(","); player.setVariable(ar[0],eval(ar[1])); alert("Method is invoked!!") } естесттвенно, при вызове ф-ии getJSVar появлялось окошко сообщения, то есть метод плеера выполнился, но переменная temp обновит свое значение только на следующем кадре, и плеер не подавал признаков жизни :)
__________________
2B||!2B? - That is the Question! |
|
|||||
|
Мастер Цифрового Облика
|
да..
и ЫШШО... во-первых: функсыя setVariable пишется не так в JS она пишытся вот так: movie.SetVariable([target],[variable]); т.е. с БольшОЙ буквы "S" во-вторых действительно нужно сначала подождать появления твоего мувика в сцене, а потом туда уже все пихать.. а в третьих я считаю более грамотным - сделать вызов функции ИЗ мувика, тогда уж ему точно переменные придут все. Последний раз редактировалось УильямБрэдберри; 17.07.2002 в 15:15. |
|
|||||
|
Регистрация: Apr 2002
Адрес: Ukraine Kyiv
Сообщений: 51
|
2УБ:
нет, ты не прав, все таки функция setVariable(), таки с маленькой буквы далее, мы вызываем функцию _из_ мувика. зря ты так. ish же написал, что вызываем в сценарии fscommand(); а она уже в свою очередь вызывает нам нашу setVariable() из документа. так что все граммотно. и насчет кадра ish тоже прав. я вот сделал простой мувик с кнопкой на первом кадре, которая принажатии делает переход gotoAndStop(2) а во втором кадре кнопку при нажатии которой gotoAndStop(1) в первом кадре я подкачал значение прозрачности для кнопки с помощью setVariable(); так вот, кнопки изменили прозрачность только тогда, когда я перешел во второй кадр и из него вернулся в первый. так что ish очень даже прав насчет обновления импортируемых переменных. я только что все проверил. все так как они и сказал. 2ish: так что получается, если мне нужно для формирования таблицы качать из джаваскрипта строковую переменную, с ней можно будет работать только тогда, когда мы еще раз станем в первый кадр? безобразие, а что делать? ![]()
__________________
up the irons! |
|
|||||
|
да, правильно с большой конечно, эт я по привычке :)
так вот, продолжая если есть МХ то суть проблемы легко решить при помощи так называемой функции возврата (callback), которая будет исполняться при приеме плеером значения запрашиваемой переменной... как это реализовано, линк выше :)
__________________
2B||!2B? - That is the Question! |
![]() |
Часовой пояс GMT +4, время: 21:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|