Обнаружение браузера Opera Mini с использованием Javascript

Я написал код JavaScript для своего веб-сайта, чтобы определить, работает ли он в браузере Opera Mini на мобильных устройствах. Так как Opera Mini имеет функцию сохранения данных, при включении она иногда не загружает сайт должным образом, поэтому я хочу отобразить сообщение, обнаружив, является ли используемый браузер Opera Mini.

Приведенный ниже код отлично работает для Opera Mini на iOS, но не работает на Android. Какие-нибудь предложения, чтобы заставить код также работать для Opera Mini на Android?

<script type="text/javascript">
 function o(){
   var isMobile = {
    Opera: function() {
        return navigator.userAgent.match(/Opera Mini/i);
                      },
                  };
     if( isMobile.Opera() ) alert('If you are using Opera Mini please disable Data Savings Mode to Have a pleasant browsing experience :)');
             }
 window.onload = o;
</script>

3 ответа

Решение

Никогда не слышал об Opera Mini раньше, но я сделал Google для него и нашел https://dev.opera.com/articles/opera-mini-and-javascript/. По сути, она использует строку агента пользователя, чтобы определить,

var isOperaMini = (navigator.userAgent.indexOf('Opera Mini') > -1);

что очень похоже на ваш метод.

Тем не менее, она также предполагает, что вы можете использовать объект окна, чтобы определить это. "Opera Mini также включает объект operamini как свойство объекта окна. Чтобы проверить наличие этого объекта, используйте следующий код".

var isOperaMini = Object.prototype.toString.call(window.operamini) === "[object OperaMini]"

Если вы все еще не можете заставить его работать, я бы предложил другой подход к этому. Подойдите к этой проблеме, попытавшись сохранить с помощью функции сохранения, а в случае сбоя воспользуйтесь любой резервной функцией сохранения, которую вы намереваетесь использовать. Поэтому всякий раз, когда это Opera Mini, он сможет использовать функцию сохранения данных, но когда это не Opera Mini, он будет использовать альтернативную функцию. Подумайте о попытке / поймать здесь. Конечно, вы хотели бы рассмотреть реализацию при извлечении сохраненных данных.

Я имею дело с той же проблемой определения того, реализует ли браузер режим сохранения данных с помощью прокси-сервера, но это включало бы больше, чем Opera Mini в режиме Extreme. Он будет включать UC Browser Mini для Android в скоростном режиме (очень популярен в Китае, Индии и Индонезии) и Chrome для Android в режиме сохранения данных. К счастью, этот режим теперь можно отключить во всех трех браузерах - хотя многие люди в развивающихся странах не могут себе этого позволить, поэтому, вероятно, этот вариант так популярен.

Дин Хьюм приводит пример того, как определить, переключил ли пользователь режим сохранения данных в любом браузере. Но чтобы получить эти заголовки запросов, вам нужно будет использовать серверные сценарии или, в его примере, сервисный работник, но не традиционный Javascript.

Этот ответ объясняет, как обнаружить UC Browser Mini в скоростном режиме.

В статье Тиффани Брауна о Dev.Opera, на которую ссылается @Jared Drake, неохотно рекомендуется обнаружение браузера для Opera, а не обнаружение функций. Как упоминал Джаред, вы можете использовать:

 var isOperaMini = (navigator.userAgent.indexOf('Opera Mini') > -1);

 var isOperaMini = Object.prototype.toString.call(window.operamini) === "[object OperaMini]"

Но она перечисляет некоторые неподдерживаемые события браузера, которые, возможно, вы могли бы прослушать, такие как mousemove или же scroll, И она написала целую статью о просмотре и экспорте исходного кода в Opera Mini. Она отмечает, что Opera Mini, по крайней мере с режимом Extreme Data Saver, на самом деле отображает OPML вместо HTML.

К счастью, Opera Mini предлагает возможность проверять текущее дерево DOM, отображаемое прокси-серверами Opera. Войти server:source в адресной строке Opera Mini для просмотра источника загруженной в данный момент страницы.

В этом источнике вы можете увидеть что-то, что поможет вашему обнаружению, хотя я не видел этого в своем.

Мое решение - это в основном упрощение того, что уже предложено, протестировано на реальном устройстве.

Обнаружить Opera Mini так же просто, как это:

if(window.operamini) { /* do something */ }

или же

isoperamini = !!window.operamini;  // returns true or false
Другие вопросы по тегам