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 молча управляет результатами запроса по-другому.