Вот вопрос: как лучше всего убедиться, что ваше требование для Flash версии «x» на сайте будет правильно определять наличие более поздней версии Adobe Flash Player версии «10» (или «1y», если на то пошло)?
Вот загадка: почему так много сайтов, требующих Flash Player версий 8 и 9 или выше, не могут обнаружить Flash Player версии 10?
А вот и сочный фон в разноцветных снимках экрана в моем посте "WTF: The Adobe Flash Version 1x Кризис."
ОБНОВЛЕНИЕ 2: С тех пор я подтвердил, что проблема, которую я вижу, не связана с неправильным сравнением той же или более поздней версии. Похоже, что некоторое обнаружение на стороне клиента не может определить, установлен ли вообще какой-либо Flash Player, не говоря уже о его версии. Я также обнаружил, что если я работаю как администратор, у меня нет проблем: обнаружение Flash 10 работает нормально. Это делает банку со змеями больше, чем я думал. Я пока не готов изменить заголовок этого вопроса и продолжаю анализировать клиентский код, чтобы увидеть, какая чудесная логика разворачивается. Подробности об этих последних откровениях есть в моем блоге.
Обновлено: Хотя я провел поиск, я пропустил связанный с этим вопрос "Почему после обновления до Flash 10 не воспроизводятся флеш-видео?". Там есть интересные предположения, но они не дошли до сути. Также неясно, как была решена проблема Леви. Интересно ... Может быть, здесь мы сможем разобраться во всем.
Некоторая предыстория
Мне удалось установить новую версию Adobe Flash Player 10.0.12.36 в качестве чистой установки (предыдущие версии были удалены с помощью программы удаления, предоставленной Adobe).
Первое разочарование было замечено, когда я не смог воспроизвести последнюю программу NCIS с сайта CBS Television, ни в HD, ни в старом обычном стандарте. Но я мог проигрывать видео своих любимых программ на Hulu. Чем больше я нюхал, тем больше раз находил эти неприятные сообщения you-don't-have-Flash, you-need-a-later-version-of-Flash, your-version-of-Flash, старые сообщения, которые предлагали кнопка для скачивания.
Каждый раз, когда я нажимал кнопку загрузки / обновления и сообщал сайту Adobe выполнить установку (которая должна завершиться неудачно, если попытаться, потому что я не работаю как администратор), моя версия 10.0.12.36 была подтверждена мгновенно, и попытки обновления не выполнялись. .
Любопытно, а?
Соревнование
Думаю, я точно знаю, какая наиболее вероятная ошибка в скрипте обнаружения Flash, который используют люди. Это слишком сочно, чтобы не быть ошибкой.
Это не означает, что все сайты, которые не могут обнаружить версию 10, страдают от одной и той же ошибки. Я просто думаю, что тот, который я имею в виду, действительно вероятен. Мне, наверное, стоит где-нибудь запечатать мою теорию в конверте. А пока давайте посмотрим, что может предложить сообщество StackOverflow и чем мы закончим урок.
Я говорю, что ошибка действительно простая и очень забавная. Что ты говоришь?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я предполагаю, что обнаружение будет происходить из строки, которая похожа на «Flash Player версии X.Y», выполнив что-то вроде «получить символ перед '.' и преобразовать его в число ". Я сам делал это несколько раз, это просто глупо.
Большой! Я бы никогда об этом не подумал. Это определенно будет учитывать некоторые из сообщений, которые я получаю, что я использую версию "0" или моя версия старше, чем версия (8 или 9), которую они хотят. Возможно, вы на чем-то натолкнулись. Посмотрим, что говорят другие.
В примере кода, с которым я столкнулся, используется split, чтобы разбить строку версии на массив строк, чтобы этой ошибки не произошло. Однако не имеет значения, как будут сравниваться детали после этого. Кажется, существует огромное количество способов сделать это неправильно. Интересно, кто будет победителем.
К сожалению, проблема вызвана плохим обнаружением версии поставляется со вспышкой. Правильно, дрянной код, который он фактически создал с помощью Adobe Flash (не знаю, какие версии), поэтому он так широко распространен.
Лично я использую swfObject для встраивания флеш-памяти.
Я надеялся, что это не их дело. Можете ли вы предоставить ссылки на то, где Adobe поставляет код обнаружения. Я не совсем понимаю, как его использовать на сайте, который обслуживает видеопоток и выбирает Flash Player.
Сайт swfObject очень удобен. Я нашел Adobe Flash Player Detection Kit 1.5 в adobe.com/products/flashplayer/download/detection_kit. Мне будет интересно посмотреть, не взорвали ли они его.
Сейчас я прорабатываю образец обнаружения на стороне клиента Adobe Flash Player Detection Kit 1.5. Пока проблема не в сравнении, а вообще в поиске Flash Player. Теперь мне нужно покопаться в GetSwfVer, чтобы понять, почему он не находит Flash Player.
Ах, я также просто случайно определил, что обнаружение Flash Player работает, когда я запускаю из учетной записи администратора, но не из учетной записи с ограниченным доступом. Я наблюдал подобное в других условиях. Может быть, я смогу это точно определить, продолжая изучать анатомию примера со стороны клиента.
Я предполагаю, что javascript выполняет сравнение строк, а в строке строк "10" <"9".
Кроме того, Flash10 несколько изменил свою модель безопасности (сломав инструмент, который я использую под названием SWFUpload), так что это может быть связано с этим (см .: http://benr75.com/articles/2008/11/25/swfupload-with-flash-10-fix)
Я тоже об этом подозревал. Поразмыслив, я обнаружил, что JavaScript не дает сбоев, как strcmp в C. x <y в JavaScript всегда является числовым сравнением, и он преобразует любые строки в числа перед сравнением. Итак, в коде обнаружения JavaScript, который я проверяю, это не так.
alert ("В строковом пространстве \" 10 \ "равно" + ("10" <"9"? "меньше": "больше") + "чем \" 9 \ ".")
if ("10" <"9") {alert ("10 меньше 9 в строке")}
var high = "10", low = "9"; if (high <low) {alert (high + "меньше" + low)}
@orcmid: попробуйте три приведенных выше примера JavaScript. Все они дадут вам результат, что 10 меньше 9, поскольку они сравнивают строки (проверено в Firefox, IE, Opera и Crome).
Если оба параметра являются строками, они будут сравниваться как строки. Но если одно из них числовое, строка будет преобразована, поэтому alert ("10" <9) вернет false.
В моей книге «Чистый JavaScript» написано, что «<» всегда является числовым сравнением, поэтому ошибка произойдет, если кто-то поверит этому. К счастью, в образце клиентского кода и файла .js для Adobe Flash Player Detection Kit 1.5 используются разбиения для синтаксического анализа строк версии и делается числовой символ «<» с помощью parseFloat.
Итак, теперь я знаю, почему там используется parseFloat. Проблема, с которой я столкнулся, может заключаться в полном отказе от обнаружения установленного Flash Player, даже при отсутствии проверки версии.
Любое решение для этого? Любопытный!!!