![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]() ![]()
Сообщение
#1
|
|
Новичок ![]() Группа: Новичок Сообщений: 9 Регистрация: 21.07.2009 Пользователь №: 9397 ![]() |
Доброго времени суток.
Я хочу сделать флэш ролик, который будет получать строковую переменную (url-адрес) из JavaScript, производить некоторые действия над этой переменной в ActionScript и переадресовывать пользователя на данный адрес. Я очень много гуглил по поводу передачи данных из JS в AS, нашёл 2 способа: - SWFObject (не удобен, много лишнего кода) - Мост между JS и AS (ExternalInterface) - этот и выбрал. Но возникла небольшая проблема, а именно: у меня не происходит редирект (переадресация) или не происходит передача данных из JS в AS. На JS я пишу следующее: Код function sendFromJS(txt) { var movie = (navigator.appName.indexOf("Microsoft")!=-1 ? window : document)["BridgeMovie"]; movie.sendFromJS(txt); } А в AS: Код // Flash Storage example import flash.external.*; ExternalInterface.addCallback("sendFromJS", null, recieveFromJS); function recieveFromJS(t) { // _root.theText.text = t; getUrl(t, "_self"); // !!! или var my_lv:LoadVars = new LoadVars(); my_lv.send(t, "_blank", "POST"); } _root.button.onRelease = function() { ExternalInterface.call("recieveFromFlash", _root.theText.text); _root.theText.text = ""; } "Publish -> разрешить доступ только к сети" делаю. У меня Adobe Flash CS4. Я вообще не знаю AS, поэтому могу ошибаться в типах данных. Прошу Вашей помощи, Флэш-гуру. Сообщение отредактировал Lalf - 21.07.2009 - 05:14 |
|
|
![]()
Сообщение
#2
|
|
![]() Активист ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 987 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
Если не работает в режиме эмуляции, то надо сначала зайти сюда:
http://www.macromedia.com/support/document..._manager04.html Или не работает уже при выкладывании на сайт? |
|
|
![]()
Сообщение
#3
|
|
Новичок ![]() Группа: Новичок Сообщений: 9 Регистрация: 21.07.2009 Пользователь №: 9397 ![]() |
Цитата Если не работает в режиме эмуляции Я извиняюсь, но что за режим эмуляции? Я просто вставляю флэшку в HTML, а потом смотрю в браузере эту страницу. Цитата http://www.macromedia.com/support/document..._manager04.html А можно как-то без этого обойтись? Чтоб редирект происходил у всех пользователей, даже которые не меняют в своём плеере настроек. |
|
|
![]()
Сообщение
#4
|
|
![]() Активист ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 987 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
Я извиняюсь, но что за режим эмуляции? Я просто вставляю флэшку в HTML, а потом смотрю в браузере эту страницу. А можно как-то без этого обойтись? Чтоб редирект происходил у всех пользователей, даже которые не меняют в своём плеере настроек. Вы можете смотреть флешку двумя путями: 1) Вы размещаете ее на сервере (т.е. она удаленная). Открываете браузер, подсоединяетесь к интернету и через браузер ее смотрите (браузер качает ее с сервера). Так она будет работать НА САМОМ ДЕЛЕ. Так ее и будут смотреть все остальные пользователи. Насколько я понимаю, вы так не делали, а пошли путем 2: 2) Флешка у вас на компе. И вы ее можете открыть хоть браузером, хоть автономным плеером, хоть еще чем. При открытии браузером будет что-то вроде эмуляции входа в интернет. У флеша тут срабатывают ограничения безопасности для обмена с JS. Поэтому вам нужно сходить на вышеуказанную страницу и разрешить ВАШЕМУ плееру обмениваться с браузером JS (остальным пользователям это делать не нужно). Это заморочка разработчика такая, к сожалению. |
|
|
![]()
Сообщение
#5
|
|
Новичок ![]() Группа: Новичок Сообщений: 9 Регистрация: 21.07.2009 Пользователь №: 9397 ![]() |
Загрузил на сайт - та же история
![]() Может я что-то в коде накосячил? |
|
|
![]()
Сообщение
#6
|
|
![]() Активист ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 987 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
Загрузил на сайт - та же история ![]() Может я что-то в коде накосячил? Во-первых, проверьте, что возращает метод addCallback. Если он возращает true значит контакт с JS возможен. Во-вторых, getUrl у вас написан с ошибкой - он у вас разве синим подсвечен? В-третьих, из флеша вызывается JS-функция recieveFromFlash - где она? И самое главное: используйте alert в JS и trace или запись в тестовое текстовое поле во флеше. Многие вопросы отпадут сами собой. Посмотрите как сделан пример в хелпе по ExternalInterface. |
|
|
![]()
Сообщение
#7
|
|
Новичок ![]() Группа: Новичок Сообщений: 9 Регистрация: 21.07.2009 Пользователь №: 9397 ![]() |
Цитата Во-первых, проверьте, что возращает метод addCallback. Если он возращает true значит контакт с JS возможен. Я не знаю как это сделать ![]() ![]() Цитата Во-вторых, getUrl у вас написан с ошибкой - он у вас разве синим подсвечен? Точно! Не заметил это... Спасибо) У меня теперь получается редирект, но он делается только по клику, я же хочу, чтоб он при загрузке страницы срабатывал. Возможно, нужно как-то проверить связь между JS и AS, чтоб JS подождал, пока флэшка загрузится? Помогите, пожалуйста, реализовать вот это. То, что сейчас сделал. AS: Код import flash.external.*; ExternalInterface.addCallback("sendFromJS", null, recieveFromJS); function recieveFromJS(t) { var my_lv:LoadVars = new LoadVars(); my_lv.send(t, "_self", "POST"); } Полностью HTML-страница: Код <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>JS - AS</title> <script type="text/javascript"> function sendFromJS(value) { var movie = ((navigator.appName.indexOf("Microsoft")!=-1) ? window : document)["BridgeMovie"]; movie.sendFromJS(value); } </script> </head><body> <input type="button" value="Click" onclick="sendFromJS('http://yandex.ru/')"> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="BridgeMovie" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" height="5" width="5"> <param name="movie" value="red.swf"> <param name="allowScriptAccess" value="sameDomain"> <embed src="red.swf" name="BridgeMovie" play="true" loop="false" quality="high" allowscriptaccess="sameDomain" scale="exactfit" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" align="middle" height="5" width="5"> </object> <script type="text/javascript"> sendFromJS('http://yandex.ru/'); </script> </body></html> Как видите, при нажатии на кнопку всё работает, а на при загрузке страницы почему-то не получается( |
|
|
![]()
Сообщение
#8
|
|
![]() Активист ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 987 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
У меня теперь получается редирект, но он делается только по клику, я же хочу, чтоб он при загрузке страницы срабатывал. Я вообще сетевыми флешками почти не занимюсь ![]() Но мне кажется, что это срабатывает политика безопасности или настройки браузера: открытие другой страницы/вкладки должно быть ЯВНО инициализировано пользователем, а не кодом. |
|
|
![]()
Сообщение
#9
|
|
Новичок ![]() Группа: Новичок Сообщений: 9 Регистрация: 21.07.2009 Пользователь №: 9397 ![]() |
chingachgoog, спасибо за помощь, я всё таки использовал SWFObject и всё заработало как надо
![]() |
|
|
![]()
Сообщение
#10
|
|
Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Flash Zone Team Сообщений: 4332 Регистрация: 10.03.2005 Из: Киев Пользователь №: 5 ![]() |
Цитата А можно как-то без этого обойтись? Lalf, для этого стоит запускать флешку с веб сайта. Причём помимо использования сайта в Интернете, можно использовать и локальный веб сервер (который ускорит процесс тестирования как флеш, так и других веб разработок). Цитата Вы размещаете ее на сервере (т.е. она удаленная). chingachgoog, как я уже сказал, можно использовать локальный веб сервер (на localhost). Сервер будет локальным (поэтому в Интернет заходить не нужно будет, вообще можно не иметь соединения с Сетью), а для флеш плеера будет работать соответствующая политика безопасности (как для обычного веб сайта). Цитата Это заморочка разработчика такая, к сожалению. Это такой защитный механизм и Адоб с каждой новой версией всё более ужесточает политики безопасности флеша (с исправлением дыр в плеере и плагине). При этом добавляя новые дыры, которые им придётся исправлять в новых версиях ![]() Цитата я всё таки использовал SWFObject и всё заработало как надо Данную задачу можно было решить с помощью обоих методов (чтобы редирект работал и по клику и при загрузке страницы), но раз решил с помощью SWFObject, то и хорошо. Это популярный метод размещения флешек на веб сайтах, так что с ним всё бы обязательно заработало. |
|
|
![]()
Сообщение
#11
|
|
![]() Активист ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 987 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
А я вот тут подумал:
есть html-метка, которая заставляет запускать html-страничку только в песочнице зоны "интернет" Код <!-- saved from url=(0014)about:internet --> А что если есть схожая метка (или возможность) запускать html-страничку в локальной песочнице? Тогда swf-ки с доступом локально-файловая система могли бы безпроблемно работать! А то как-то западло лезть на сайт макромедии и устанавливать разрешение на конкретную папку или файл http://www.macromedia.com/support/document..._manager04.html Бысрый серф по инету результатов не дал. Что скажут знатоки html? |
|
|
![]()
Сообщение
#12
|
|
Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Flash Zone Team Сообщений: 4332 Регистрация: 10.03.2005 Из: Киев Пользователь №: 5 ![]() |
Цитата есть html-метка, которая заставляет запускать html-страничку только в песочнице зоны "интернет" chingachgoog Это Mark of the Web и данная метка поддерживается только в Internet Explorer (начиная с IE4). Другие браузеры не поддерживают и игнорируют данную метку. Цитата А что если есть схожая метка (или возможность) запускать html-страничку в локальной песочнице? Для этого просто нужно не указывать данной метки (при работе с IE) и тогда при локальном запуске файла (в любом браузере) веб страница будет запущена в локальной зоне. Только тогда нужно будет устанавливать разрешения ![]() |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 17.10.2011 - 21:15 |