PDA

Просмотр полной версии : Можно ли определить браузер из-под флеша ?


Micar
24.05.2007, 19:04
Можно ли определить браузер из-под флеша ? и как это сделать?

1. вид браузера ( IE, FF... MSIE)

2. версию (номер)

screamge
24.05.2007, 19:10
Можно определить это через JS и затем сообщить об этом флешу

iNils
24.05.2007, 21:26
В смысле определить браузер с помощью js во время загрузки и передать с помощью flashvars.

BigDan
24.05.2007, 21:46
или как вариант - через пхп.

Micar
24.05.2007, 21:46
спасибо!

screamge
24.05.2007, 22:09
http://noregret.org/tutor/navigation/

Kikasso
25.05.2007, 03:38
javascript:var s='';for(var p in navigator)s+=p+'>'+navigator[p]+'\n';alert(s);
Поместить в адресную строку броузера, нажать <ENTER>.
Потом написать функцию на js, которая возьмет что вам из этого нужно и запишет в flashvars.

MaskiShow
24.06.2009, 03:47
Подскажите, как из скрипта во флеше javascript('alert("navigator.appName")') в саму флеш, например в переменную a, передать значение navigator.appName? Т.е. как на джава во флеш написать a = navigator.appName?

mooncar
24.06.2009, 10:57
Я, конечно не очень силен в JS, но вот такая конструкция работает:
1. В секции HEAD странички пропишите такую функцию:
<script type="text/javascript">
function browserDetect() {
var browser = navigator.appName;
return browser;
}
</script>

2. А в самой флешке:

import flash.external.*;

a = String(ExternalInterface.call("browserDetect"));

В переменную "а" вы получите строковое значение названия браузера, в который загружена данная страничка, ее передает вышеопределенная на странице функция JS.
Ну а еще почитайте о классе ExternalInterface, на будущее очень пригодится.

MaskiShow
24.06.2009, 12:33
Нет, необходимо именно внутри флешки установить значение переменной с помощью JS. Или это в принципе не совместимо - js выполняет браузер и только через код страницы можно передать во флешку переменные?

mooncar
24.06.2009, 12:43
Да, грубо говоря, JS выполняется браузером из скрипта, размещенного в HTML-странице. Что тогда может означать "внутри флешки установить значение переменной с помощью JS" ? У вас нет доступа к коду страницы публикации swf-ки?

MaskiShow
24.06.2009, 12:51
То и означает - установить значение переменной флеша с помощью js, не используя код страницы. JS должен быть только в теле флешки.

mooncar
24.06.2009, 13:58
Если рассуждать логически, то:

Флеш умеет взаимодействовать с внешней средой через Flash Player, который в свою очередь "знает" как передать запросы от AS внешней среде, выполненные с использованием класса ExternalInterface, а также может инициализировать переменную AS с помощью параметра внутри флешки при ее публикации - flashvars. Флеш умеет взаимодействовать с внешней средой также с помощью функции fscommand, которая передает инструкции непосредственно Flash Player'у.

JS - это программный листинг, выполняемый средой браузера, и как-то изменить/сгенерировать его изнутри флешки нельзя, можно использовать только имеющийся код.
С помощью AS-функции getURL можно загрузить документ в текущее или новое окно браузера, и передать документу значения переменных... использовать для этого javascript также можно в качестве аргумента url.

ИМХО, вывод - для получения каких-то данных от загруженного документа все-таки придется использовать "код страницы", писать на странице публикации флеша все-таки что-то придется. Вы же там пишете при публикации <obiect>, <param>, <embed>; что не дает вам использовать параметр публикации flashvars для получения имени браузера?

Stargazer
24.06.2009, 16:43
все-таки придется использовать "код страницы", писать на странице

В случае особой необходимости можно создать javascript-функцию при помощи самого же js-запроса.

Как-то так.
var s:String = "function (){ var browser = navigator.appName; return browser; }()";
var browserVersion = ExternalInterface.call(s);

Хотя сперва нужно протестировать :). Давно я js не занимался, может что спутал.

mooncar
24.06.2009, 18:40
Признаю, был неправ, вот этот вариант работает:
import flash.external.* ;
var s:String = "function () { var browser = navigator.appName; return browser; }";
var browser = ExternalInterface.call(s);
Смутило меня то, что я уже его пробовал, но такая запись отчего-то не работала, плюс указание в самом хелпе:
"call (ExternalInterface.call method)
Calls a function exposed by the Flash Player container....
......
If the container is an HTML page, this method invokes a JavaScript function in a <script> element"

Значит, можно :)

MaskiShow
24.06.2009, 20:18
Значит в самой флешке узнать тип браузера нельзя.

mooncar
24.06.2009, 20:24
Работает же, рзобрались, посмотри мой последний пост!