Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Можно ли определить браузер из-под флеша ? (http://www.flasher.ru/forum/showthread.php?t=96159)

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-запроса.

Как-то так.
Код AS1/AS2:

var s:String = "function (){ var browser = navigator.appName; return browser; }()";
var browserVersion = ExternalInterface.call(s);

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

mooncar 24.06.2009 18:40

Признаю, был неправ, вот этот вариант работает:
Код AS1/AS2:

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

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


Часовой пояс GMT +4, время: 00:40.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.