Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ActionScript 1,2 > Текущий URL


Автор: korob2001 3.12.2006, 13:29
Привет!
Подскажите пожалуйста, как узнать текущий url, т.е. тот который прописан в адресной строке браузера?

Это мне нужно для того, что бы переключать языки с одного на другой. Т.е. в каждую HTML страницу, встроен .swf файл, с флажками двух языков, в моём случае это "Французский" и "Нидерландский". Сама страница генерируется на сервере Perl программой. Для того, что бы изменить язык, нужно изменить значение параметра lang с "nl" на "fr", который передаётся методом GET. Допустим пользователь загрузил страницу "Home", с параметром "lang=nl", набрав в адресной строке:
Цитата

http://www.host.com/cgi-bin/home.pl?lang=nl

Затем он жмёт на французский флаг, в итоге должен получиться такой адрес:
Цитата

http://www.host.com/cgi-bin/home.pl?lang=fr

После чего вся информация страницы, будет переведена на французский язык. Первод делается при помощи Perl + MySQL + XML, потому это не имеет отношения непосредственно к Flash и ActionScript. Задача последнего только изменить значение одного параметра и загрузить туже страницу, которая загружена в текущий момент, но уже с изменённым параметром lang.
В случае, показаном выше, был послан запрос к программе /cgi-bin/home.pl, но это может быть и другая программа, например /cgi-bin/contact.pl, /cgi-bin/guest.pl и т.д. Текущий URL мне нужен для того, что бы загрузить перевод именно текущей страницы, а не какой-нить другой. Нужно что-то типа переменной окружения $ENV{SCRIPT_NAME}.

Автор: AlDev 3.12.2006, 14:04
trace (_root.url);

а вообще на эту тему
http://noregret.org/tutor/navigation/

Добавлено @ 14:05 
В строке браузера - через JS. Читай Нокса, там решение smile

Автор: korob2001 4.12.2006, 19:13
Что-то ничего не пойму.
Код

trace(_root.url);

Пишет undefined.
Создаю динамическое текстовое поле с именем info, после пишу такой код:
Код

_root.info.text = _root.url;

Поле всё равно остаётся пустым, после запуска.

Автор: AlDev 4.12.2006, 21:55
ну может быть _url =) я не помню, посмотри MovieClip class

Автор: korob2001 4.12.2006, 23:22
Не, не то. Выводит следующий адрес:
Цитата

http://localhost/url/url.swf

А нужен был:
Цитата

http://localhost/cgi-bin/test.pl

т.е. то который был в адресной строке браузера.

Ладно, сейчас ещё попробую поискать, может чего-нить и нарою.

Автор: AlDev 5.12.2006, 08:29
Я же дал ссылку в самом начале с JavaScript.

Цитата(AlDev @  3.12.2006,  19:04 Найти цитируемый пост)
а вообще на эту тему
http://noregret.org/tutor/navigation/

Добавлено @ 19:05 
В строке браузера - через JS. Читай Нокса, там решение


Автор: korob2001 5.12.2006, 21:12
Да нет, я просто думал что есть, что-то встроенное. Просто лучше чем взаимодействовать через JS, я могу просто передать Flash'ке ещё один параметр. Например так:
Код

/site/swfs/title.swf?sid=&lang=nl&pag=home.pl

где параметр pag содержит адрес страницы, которая в данный момент показана.
Вот кстати каким образом я решил этот вопрос, а так же http://forum.vingrad.ru/topic-125304.html, если их объединить.
Сначала почитал вот эту http://blog.deconcept.com/swfobject/, которую привёл SelenIT. Попробовал, но меня смутил размер файла http://blog.deconcept.com/swfobject/swfobject1-4.zip, казалось бы для такой простой задачи. Да и не любитель я юзать чужой код.

Решил пойти своим путём.
Что-то мне подсказало, что достаточно вынести код, который выводит теги <object ...> .... </object> в оддельный файл .js, что бы IE не заметил их.
Написал такой код:
Код

function shSWFile(swf,id,width,height,backcolor) {
    document.write("<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0\" width=\"" + width + "\" height=\"" + height + "\" id=\"" + id + "\" align=\"\">");
    document.write("<param name=\"movie\" value=\"" + swf + "\">");
    document.write("<param name=\"quality\" value=\"high\">");
    document.write("<param name=\"bgcolor\" value=\"" + backcolor + "\">");
    document.write("<embed src=\"" + swf + "\" quality=\"high\" bgcolor=\"" + backcolor + "\" width=\"" + width + "\" height=\"" + height + "\" name=\"" + id + "\" align=\"\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\">");
    document.write("</embed>");
    document.write("</object>");
}

После чего сохранил его в файл myswf.js
Затем в HTML странице пишу такой код, что бы подключить файл myswf.js и использовать функцию shSWFile().
Код

<html>
   <head>
       <title>Test</title>
       <!--// Подключаем файл myswf.js //-->
       <script language="JavaScript" type="text/javascript" src="myswf.js"></script>
   </head>
   <body>
       <!--// Вставляем первую Flash'ку //-->
       <script language="JavaScript" type="text/javascript">
           <!--//
              shSWFile("/flash/title.swf?sid=&lang=nl&pag=home.pl","title","778","200","#000000");
           //-->
       </script>
       <br/><br/>
       <!--// Вставляем вторую Flash'ку //-->
       <script language="JavaScript" type="text/javascript">
          <!--//
              shSWFile("/flash/menu.swf?sid=&lang=nl&pag=home.pl","menu","203","195","#000000");
          //-->
       </script>
   </body>
</html>

Здесь так же следует обрать внимание на параметр pag, в котором передаётся текущий URL во Flash фильм.

В итоге две проблемы решены:
1: IE отстебался со своей защитой, без использования, достаточно большого, swfobject.js
2: Flash знает текущий url каждой страницы, без взаимодействия с JS.

Всем ОГРОМНОЕ СПАСИБО и + за помощь.

PS: Можно было бы передавать ещё несколько аргументов функции JavaScript shSWFile(), например:
classid,  quality, version и т.п. ,но это помоему уже лишнее, для данной задачи.
Хотя может я и не прав?

Автор: AlDev 6.12.2006, 09:04
открой например вот это:
http://z3labs.com/projects/nn/

там хоть и без swf object, но показан пример с языком и навигацией, когда Flash не перегружается!

Про не любитель юзать чужой код - эт глупо smile

Автор: korob2001 6.12.2006, 10:48
Цитата(AlDev @  6.12.2006,  06:04 Найти цитируемый пост)
Про не любитель юзать чужой код - эт глупо

А как же велосипеды?  smile 
Цитата(AlDev @  6.12.2006,  06:04 Найти цитируемый пост)
там хоть и без swf object, но показан пример с языком и навигацией, когда Flash не перегружается!

Да нет, это не то.
Там флешка на всю страницу и иниформации там маловато.
У меня на Flash только верхушка и меню, всё остальное html + CSS + JavaScript. Информации намного больше, её тащитPerl из БД + XML + шаблоны, да и меняется она динамически.

Автор: AlDev 6.12.2006, 21:25
А. Если только шапка тады да.

Цитата(korob2001 @  6.12.2006,  15:48 Найти цитируемый пост)
А как же велосипеды?  smile 

А как же Framework-и?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)