使用Javascript检测Opera迷你浏览器

使用Javascript检测Opera迷你浏览器,javascript,html,Javascript,Html,我已经为我的网站编写了一个javascript代码来检测它是否在移动设备上的Opera迷你浏览器上运行。由于Opera Mini有一个数据保存功能,当它被启用时,有时无法正确加载站点,因此我想通过检测所使用的浏览器是否为Opera Mini来显示一条消息 下面发布的代码在iOS上完全适用于Opera Mini,但在Android上不适用。有什么建议可以让代码在Android上也适用于Opera Mini吗 函数o(){ var isMobile={ Opera:函数(){ 返回navigat

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

下面发布的代码在iOS上完全适用于Opera Mini,但在Android上不适用。有什么建议可以让代码在Android上也适用于Opera Mini吗


函数o(){
var isMobile={
Opera:函数(){
返回navigator.userAgent.match(/Opera-Mini/i);
},
};
if(isMobile.Opera())警报('如果您使用的是Opera Mini,请禁用数据保存模式以获得愉快的浏览体验:);
}
window.onload=o;

以前从未听说过Opera Mini,但我用谷歌搜索了一下,找到了它。基本上,她是在使用用户代理字符串来确定它是否为opera mini

var isOperaMini = (navigator.userAgent.indexOf('Opera Mini') > -1);
这和你的方法非常相似

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


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

< P>我处理的是检测浏览器是否使用代理服务器实现数据保存模式的相同挑战,但这将包含在极端模式下的Opera Mini。它将包括速度模式(在中国、印度和印度尼西亚非常流行)和Android模式的Chrome。幸运的是,这一模式现在可以在所有三种浏览器上关闭——尽管许多发展中国家的人负担不起,这可能就是为什么这个选项如此流行的原因

迪安·休姆举例说明了如何在任何浏览器中使用。但要获得这些请求头,您需要使用服务器端脚本,或者在他的示例中,使用服务工作者,而不是传统的Javascript

这个答案解释了如何去做

@Jared Drake引用了Tiffany Brown关于的文章,该文确实不情愿地建议将浏览器检测用于Opera,而不是Opera。正如Jared提到的,您可以使用:

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

 var isOperaMini = Object.prototype.toString.call(window.operamini) === "[object OperaMini]"
但是她列出了一些你可能会嗅到的东西,比如
mousemove
或者
scroll
。她写了一整篇关于这个的文章。她指出,OperaMini,至少在极端数据保存模式下,实际上是显示而不是HTML

幸运的是,OperaMini提供了检查当前DOM的功能 由Opera的代理服务器呈现的树。在中输入
server:source
Opera迷你地址栏以查看当前加载的源 页面


您可能会在该源代码中看到一些有助于检测的内容,尽管我在我的源代码中没有看到。

我的解决方案主要是简化已经提出的内容,并在实际设备上进行测试

检测Opera Mini非常简单:

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


找出网站无法正确加载的原因并解决该问题不是更好吗?@JeremyJStarcher启用数据保存模式后,网站会被发送到opera的服务器,在那里网站会被压缩,然后发送回请求浏览器,由此产生的站点将以完全不同的方式加载。添加缓存破坏程序会阻止这种情况吗?
if(window.operamini) { /* do something */ }
isoperamini = !!window.operamini;  // returns true or false