Как из AS3 определить, в каком браузере открыта флэш?

Рейтинг: 1Ответов: 1Опубликовано: 05.10.2014

Пробовал вот такой вариант. В принципе больше не нашел вариантов.

        try
        {
            userAgent = ExternalInterface.call("window.navigator.userAgent.toString");

            var browser:String = "[Unknown Browser]";
            var OS:String = "[Unknown OS]";

            if (userAgent.toLowerCase().indexOf("safari") != -1)
            {
                browser = "Safari";
            }

            if (userAgent.toLowerCase().indexOf("chrome") != -1)
            {
                browser = "Chrome";
            }

            if (userAgent.toLowerCase().indexOf("msie") != -1)
            {
                browser = "Internet Explorer";
            }

            if (userAgent.toLowerCase().indexOf("opera") != -1)
            {
                browser = "Opera";
            }

            if (userAgent.toLowerCase().indexOf("macintosh") != -1)
            {
                OS = "Mac";
            } else {
                OS = "Windows";
            }

        }
        catch (e:Error)
        {

        }

Может, кто-нибудь сталкивался уже с таким?

P.S. По большому счету, это нужно, чтобы сделать нормальную анимацию под разные браузера. В одном браузере одни задержки, и анимация красивая становится. В опере, например, приходится ускорять таймеры, чтобы не было рывков в анимации.

Ответы

▲ 1Принят

ActionScript запускается в изолированное среде и не имеет абсолютно никакого представления о внешнем окружение. Однако он может вызвать внешний скрипт на выполнение и получить результат его работы. К примеру, JavaScript.

В свою очередь, JavaScript тоже не имеет представление об окружающей его среде, только к информации, которую ему может предоставить браузер. А в браузере есть только одно место, откуда можно получить примерные сведения, это window.navigator.userAgent.

Такова политика безопасности браузеров, поэтому, кроме вашего варианта, больше способов нет.

Ну, еще можно посмотреть тут, как лучше организовать проверку (синтаксис JS и AS в этом плане будет одинаковый).

var bName = function () {
                if (ua.search(/MSIE/) > -1) return "ie";
                if (ua.search(/Firefox/) > -1) return "firefox";
                if (ua.search(/Opera/) > -1) return "opera";
                if (ua.search(/Chrome/) > -1) return "chrome";
                if (ua.search(/Safari/) > -1) return "safari";
                if (ua.search(/Konqueror/) > -1) return "konqueror";
                if (ua.search(/Iceweasel/) > -1) return "iceweasel";
                if (ua.search(/SeaMonkey/) > -1) return "seamonkey";
                return "undefined";
            }();

switch (bName) {
    case "ie" : IEInit(); break;
    case "firefox" : InitFF(); break;
    case "opera" : InitOpera(); break;
    case "chrome" : InitChrome(); break;
    ...
    case "undefined" : InitDefault; break;    
};