Просмотр полной версии : Можно ли определить браузер из-под флеша ?
Можно ли определить браузер из-под флеша ? и как это сделать?
1. вид браузера ( IE, FF... MSIE)
2. версию (номер)
screamge
24.05.2007, 19:10
Можно определить это через JS и затем сообщить об этом флешу
В смысле определить браузер с помощью js во время загрузки и передать с помощью flashvars.
или как вариант - через пхп.
screamge
24.05.2007, 22:09
http://noregret.org/tutor/navigation/
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?
Я, конечно не очень силен в 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 выполняет браузер и только через код страницы можно передать во флешку переменные?
Да, грубо говоря, JS выполняется браузером из скрипта, размещенного в HTML-странице. Что тогда может означать "внутри флешки установить значение переменной с помощью JS" ? У вас нет доступа к коду страницы публикации swf-ки?
MaskiShow
24.06.2009, 12:51
То и означает - установить значение переменной флеша с помощью js, не используя код страницы. JS должен быть только в теле флешки.
Если рассуждать логически, то:
Флеш умеет взаимодействовать с внешней средой через 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 не занимался, может что спутал.
Признаю, был неправ, вот этот вариант работает:
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
Значит в самой флешке узнать тип браузера нельзя.
Работает же, рзобрались, посмотри мой последний пост!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.