Opera Turbo включена?

У меня есть страница, которая использует Flash с анимацией (это не критично, но дополнительно).

Все работает нормально, если я не использую Opera с активированным Turbo. Затем Flash-ролик отображается в виде большой уродливой стрелки в круге размером с флэш-фильм, который предназначен для использования в качестве кнопки воспроизведения для вспышки.

Я использую SWFobject, так что я мог бы легко включить анимацию, если бы знал, что используется турбо-механизм Opera, но как мне это сделать в JavaScript (или, может быть, в CSS, если это так)


Как воспроизвести?
Посмотрите эту страницу с помощью Opera (или любой другой страницы, которая использует flash)
http://www.adobe.com/software/flash/about/
Без Opera Turbo вы видите флэш-анимацию и информацию о версии Flash. С Opera Turbo вы видите две белые стрелки в серых кружках.


edit 1 Теперь я совершенно уверен, что нет ни чистого решения JS, ни решения PHP. Лучшее предположение - комбинированное решение AS/JS.

3 ответа

Решение

Вы можете попробовать проверить, загружен ли flash-объект каким-либо javascript. Этот код работает на моем компьютере с Opera 11:

<html>
<head>
  <script language=JavaScript>
    function isFlashBlocked(){
      var blocked;
      try {
        // Can test this on any flash object on the page
        window.document.myFlash.SetVariable("dummy", "dummy");
        // Flash not blocked
        blocked = false;
      }
      catch(err) {
        // Flash blocked
        blocked = true;
      }

      return blocked;
    }

    function removeBlockedFlash() {
      if (isFlashBlocked()) {
        // Hide all flash objects
        window.document.myFlash.setAttribute("style", "display: none");
        // ...

        // Display replacement content
        window.document.myImage.setAttribute("style", "display: inline");
        // ...
      }
    }
  </script>
</head>
<body onload="removeBlockedFlash()">
  <object type="application/x-shockwave-flash" data="HelloWorld.swf" 
          width="100" height="100" id="myFlash">
  </object>
  <img src="image.jpg" style="display: none" id="myImage" />
</body>
</html>

Если вы обнаружите, что вспышка заблокирована, вы скрываете каждый объект вспышки и отображаете, что вы хотите.

Изменить: Этот код не работает с Firefox, вам, вероятно, необходимо определить браузер перед использованием этой функции.

Обнаружение на стороне клиента: нет способа получить к нему доступ через javascript. Обнаружение на стороне клиента для Opera Turbo в настоящее время невозможно, может быть, оно будет поддерживаться в будущем, но кто знает?

Обнаружение на стороне сервера: Когда Opera Turbo включена, все запросы от клиента отправляются на серверы Opera, серверы Opera будут обращаться к вашему приложению (делать сжатия) и пересылать обработанный контент конечному клиенту (компьютеру пользователя).

Имея это в виду, давайте проведем анализ сетевого трафика и посмотрим, куда идет ваше соединение:

~$ nslookup opera10beta-turbo.opera-mini.net
>Server:        189.40.226.80
>Address:   189.40.226.80#53
>Non-authoritative answer:
>opera10beta-turbo.opera-mini.net   canonical name = global-turbo-1.opera-mini.net.
>Name:  global-turbo-1.opera-mini.net
>Address: 141.0.11.252

~$ nslookup 64.255.180.252
>Server:        192.168.1.254
>Address:   192.168.1.254#53
>Non-authoritative answer:
>252.180.255.64.in-addr.arpa    canonical name = 252.0-24.180.255.64.in-addr.arpa.
>252.0-24.180.255.64.in-addr.arpa   name = global-turbo-1-lvs-usa.opera-mini.net.

Как вы можете видеть, имя и каноническое имя с серверов Opera могут быть использованы для обнаружения доступа к вашему приложению через посредство серверов Opera. Я думаю, что серверное кодирование может справиться с этим (не знаю, какой язык вы используете на своем сервере).

Хорошо помнить, что Opera Turbo не будет обрабатывать ваши запросы, если вы обращаетесь к чему-то на локальном сервере.

Надеюсь, поможет.

Я считаю, что ответ на вопрос о скорости заключается в том, что флэш-контент не загружается изначально. Вы должны вручную нажать на значок, чтобы загрузить его. То же самое для анимированных GIF-файлов. Это часть стратегии по увеличению скорости. (ср., это сообщение Opera Desktop Team.)

Вот почему вы хотите знать, как проверить Opera Turbo, а не только Opera. Из моих локальных тестов я не могу определить разницу, используя переменную PHP _SERVER["HTTP_USER_AGENT"]. Я думаю, что это похоже на то, что Opera перечисляет как строку агента пользователя, как показано здесь и здесь.

Похоже, что, скорее уведомив сайт о состоянии браузера, Opera молча управляет результатами запроса по-другому.

Другие вопросы по тегам