Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Узнать текущий applicationDomain, да так, чтобы ах (http://www.flasher.ru/forum/showthread.php?t=147420)

Psycho Tiger 03.12.2010 22:18

Узнать текущий applicationDomain, да так, чтобы ах
 
Есть такой интересный момент. По идее текущий домен тянется через ApplicationDomain.currentDomain.
Но не даёт мне покоя очень давно одна тема здесь - ссылку не вспомню уже. И спрашивалось там - а как же узнать текущий домен? И весьма авторитетный человек ответил - new LocalConnection().domain.
Что я упустил?

mikhailk 03.12.2010 22:27

Я не совсем понял, о чем речь, но вот такая штука работает:

Код AS3:

private function onAddedToStage(e:Event) : void
{
        // Проверяем, на каком домене запустились
        var domain:String = new LocalConnection().domain;
        if (domain.indexOf("mail.ru")>-1)
        {
                // Запускаемся в ММ
                startOnMM();
        }
        else
        {
                // Запускаемся на ВК
                startOnVK();
        }
 
}


Psycho Tiger 03.12.2010 22:51

Блестяще... Мне необходимо перестать употреблять то что я употребляю, спасибо.

Раз уж зашла речь о домене - loaderInfo.url - откуда загрузили, а LocalConnection().domain даст то место, где флешка крутится?

mikhailk 03.12.2010 23:24

Цитата:

domain свойство
domain:String [только для чтения]

Язык версии : ActionScript 3.0
Версии среды выполнения: 1.0 9

Строка, представляющая домен расположения текущего SWF-файла.

В возвращенной строке SWF-файлов, опубликованных для проигрывателя Flash Player 9 или более поздних версий, в точности указывается домен текущего SWF-файла, включая субдомены. Например, если SWF-файл размещен на сайте www.adobe.com, то данная команда возвращает значение "www.adobe.com".

Если текущим SWF-файлом является локальный файл, размещенный на клиентском компьютере, то данная команда возвращает значение localhost.
http://help.adobe.com/ru_RU/AS3LCR/F...on.html#domain

dimarik 03.12.2010 23:54

Хоть и не в тему. Речь тут про другие домены.
Цитата:

Сообщение от Psycho Tiger (Сообщение 954762)
По идее текущий домен тянется через ApplicationDomain.currentDomain.

Кстати, нет.

ApplicationDomain.currentDomain - это геттер, возвращающий каждый раз новый экземпляр ApplicationDomain. Как они все могут быть текущими доменами - для меня остается загадкой.

Код AS3:

trace(ApplicationDomain.currentDomain);// [object ApplicationDomain]
trace(ApplicationDomain.currentDomain == ApplicationDomain.currentDomain);// false


Psycho Tiger 04.12.2010 00:02

я прочитал поняв свою ошибку )
Но непонятно, что есть размещен. Разместить можно на хтмл странице, а можно и на сервере.
Он значит откуда грузится или где показывается?

Добавлено через 14 минут
@dimarik: нет, очень в тему. Я что-то напутал ещё в далекой юности, думая что LocalConnection#domain даёт ApplicationDomain, а в голове спроецировалась дилемма - зачем дважды одно и то же. Я рад, что мы с этим разобрались )

По поводу копий ApplicationDomain`ов, мои мысли: наверное, адоуб совсем не хотели чтобы можно было испортить "реальную" domainMemory (надо бы потестить это в 9фп, когда её ещё не было), поэтому была сделана такая обёртка по геттеру. get/hasDefinition - это методы, причем скорее всего просто обёртки, которые дёргают статик методы/методы у экземпляра, ссылку на неё статикой, потому что по всей логике getDefinition от 2 currentDomain`ов даст один результат, т.е. на каком-то уровне это пересекается. Если вызвать RTE или по другому залезть в стек вызовов можно было бы сказать что-то поконкретнее - я не лазил, это всё лишь мои предположения.
Так что мой вердикт, ни на чем не основанный - защита domainMemory.

P.S вопрос про домен - откуда или где - ещё актуален =)

mikhailk 04.12.2010 00:19

Хтмл-страница открывается по определенному url'у.
new LocalConnection().domain содержит адрес этой страницы - это совершенно точно
если открываешь локально, там localhost

Что касается ApplicationDomain - то это просто разделы для загрузки контента. У меня был проект, в котором в основную флешку грузились несколько различных флешек. Чтобы не было конфликта, перед загрузкой каждой из них приходилось создавать свой собственный домен приложения, дочерний по отношений к основному. К доменным именам (url'ам) это не имеет никакого отношения.

Впрочем, тут все расписано:
http://help.adobe.com/ru_RU/ActionSc...0204-7e07.html

Psycho Tiger 04.12.2010 00:29

Цитата:

Что касается ApplicationDomain - то это просто разделы для загрузки контента. У меня был проект, в котором в основную флешку грузились несколько различных флешек. Чтобы не было конфликта, перед загрузкой каждой из них приходилось создавать свой собственный домен приложения, дочерний по отношений к основному. К доменным именам (url'ам) это не имеет никакого отношения.
Спасибо, я это прекрасно понял =)
Точнее, я это знал. Просто в мозгу что то переклинуло.
Цитата:

new LocalConnection().domain содержит адрес этой страницы - это совершенно точно
То есть загружая флешку с adobe.com на страницу yandex.ru domain выдаст мне yandex.ru, верно?

mikhailk 04.12.2010 00:37

по идее, должно быть именно так.

Psycho Tiger 04.12.2010 00:45

Дело в том, что loaderInfo.url показывает размещение флешки, а не там, где она крутится. Достаточно авторитетные люди говорили, что без ExternalInterface узнать действительно где её запустили нельзя (можно конечно сервер дёрнуть, но мы не о том). Размещена с английского hosted, т.е. скорее всего дело чуть хуже.
Кто нибудь знает точно?

mikhailk 04.12.2010 10:54

:)

вот код:

Код AS3:

package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;
    import flash.net.*;
 
 
    public class Main extends Sprite
    {
 
        public function Main():void
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
 
        private function init(e:Event = null):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
 
            var domain:String = new LocalConnection().domain;
 
            var textField:TextField = new TextField();
            addChild(textField);
            textField.width = 300;
            textField.text = "new LocalConnection().domain: " + domain;
 
        }
 
    }
 
}

вот размещение этой флешки на моем сайте:
http://mikhailk.ru/testing/testdomain/
вывод: new LocalConnection().domain: mikhailk.ru

а вот открытие той же страницы по внутреннему адресу хостера:
http://z123325.infobox.ru/testing/testdomain/
вывод: new LocalConnection().domain: z123325.infobox.ru


PS. Если открывать с www в начале, будет еще два варианта:

new LocalConnection().domain: www.mikhailk.ru
new LocalConnection().domain: www.z123325.infobox.ru

Psycho Tiger 04.12.2010 13:34

Это очень здорово!
Спасибо большое за тест.

snow_bars 05.12.2010 15:09

А возможно получить не имя домена, а полный путь?

Цитата:

Сообщение от mikhailk (Сообщение 954853)
вот размещение этой флешки на моем сайте:
http://mikhailk.ru/testing/testdomain/
вывод: new LocalConnection().domain: mikhailk.ru

Чтобы выводило mikhailk.ru/testing/testdomain/

Psycho Tiger 05.12.2010 15:29

Если расположение флешки такое же, как откуда она грузится - то loaderInfo.url. Иначе - JS из ExternalInterface.


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

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