使用Javascript进行Opera Mini浏览器检测

时间:2016-04-15 17:18:16

标签: javascript html

我为我的网站编写了一个javascript代码,用于检测它是否在移动设备上的Opera Mini浏览器上运行。由于Opera Mini具有数据保存功能,因此启用它时有时无法正确加载站点,因此我想通过检测所使用的浏览器是否为Opera Mini来显示消息。

下面发布的代码适用于iOS上的Opera Mini,但它不适用于Android。任何建议使代码也适用于Android上的Opera Mini?

<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 个答案:

答案 0 :(得分:5)

之前从未听说过Opera Mini,但我确实谷歌了,发现https://dev.opera.com/articles/opera-mini-and-javascript/。基本上,她正在使用用户代理字符串来确定它是否是

的歌剧迷你
var isOperaMini = (navigator.userAgent.indexOf('Opera Mini') > -1);

与你的方法非常相似。

但是,她还建议您可以使用window对象来确定这一点。 “Opera Mini还包含一个operamini对象作为窗口对象的属性。要检查是否存在此对象,请使用以下代码。”

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

如果你仍然无法让它工作,我会提出另一种方法。通过尝试使用保存功能进行保存来解决此问题,如果失败,请使用您打算使用的任何后备保存功能。因此,只要它是opera mini,它就能够使用数据保存功能,但是当它不是opera mini时,它将使用替代功能。想想这里的尝试/捕获。当然,您也希望在检索保存的数据时考虑实现。

答案 1 :(得分:2)

我正在处理同样的挑战,即使用代理服务器检测浏览器是否正在实现数据保存模式,但这将超过Opera Mini在Extreme模式下。它包括UC Browser Mini for Android在速度模式(在中国,印度和印度尼西亚很受欢迎)和Chrome for Android的Data Saver模式。幸运的是,现在可以在所有三种浏览器上关闭此模式 - 尽管发展中国家的许多人都负担不起,这可能是该选项如此受欢迎的原因。

Dean Hume举例说明如何在任何浏览器中detect if the user has turned data saver mode。但是要获取这些请求标头,您需要使用服务器端脚本,或者在他的示例中,使用服务工作者,而不是传统的Javascript。

这个答案解释了如何detect UC Browser Mini in Speed Mode

@pared Drake引用的Tiffany Brown关于Dev.Opera的文章不情愿地推荐Opera而不是feature detection的浏览器检测。正如Jared所说,你可以使用:

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

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

但是她列出了一些你可以嗅探的unsupported browser events,例如mousemovescroll。她写了一篇关于Viewing and Exporting Source in Opera Mini的文章。她指出Opera Mini,至少在Extreme Data Saver模式下,实际上是显示OPML而不是HTML。

  

值得庆幸的是,Opera Mini提供了检查当前DOM的能力   由Opera的代理服务器呈现的树。在中输入server:source   Opera Mini地址栏可查看当前加载的源   页。

您可能会在该来源中看到有助于您检测的内容,但我没有在我的内容中看到它。

答案 2 :(得分:0)

我的解决方案主要是对已经提出的建议进行简化,并在真实设备上进行测试。

检测Opera Mini如此简单:

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

isoperamini = !!window.operamini;  // returns true or false