【问题标题】:Opera Browser detection not working anymoreOpera 浏览器检测不再起作用
【发布时间】:2013-12-11 10:32:09
【问题描述】:

以下 javascript 代码在几个月前有效,但现在不再有效。有什么想法吗?

If (window.opera) {
alert ("The Opera browser is not supported on this website.")
}

【问题讨论】:

  • 检测功能而不是浏览器。
  • 是的,我正在检查功能,但想要更具体。if (document.hasFocus) setInterval ("myTimer()", 1000); else alert("您的浏览器不支持 hasFocus 方法。本网站需要此方法。您必须使用其他浏览器。");}
  • @Medeno 您针对哪些浏览器?为什么?
  • 请不要通过查看浏览器名称来阻止浏览器。我是一个 Opera 用户,当一个网站阻止我时,它会让我发疯,这通常是不必要的。例如: 1) 有问题的功能已添加到 Opera,但该站点的阻止脚本尚未更新。 2) 网页设计师假设该功能仅在 Chrome/Firefox/whatever 中受支持,无需检查。 3) 该功能默认禁用,但我已在浏览器设置中启用它。 4) 我有一个扩展程序/用户脚本,可作为该功能的 polyfill 等。请不要根据其名称阻止浏览器 - 而是检测该功能。
  • 我的客户在美国,而 Opera 的市场份额几乎为零。 Opera 无法在我的网站上运行,我不会更改我的代码以使其正常运行。我想我会让 Opera 用户发疯,因为他们会在注册后发现我的网站毫无用处。 Firefox 3.6 拥有 0.28% 的美国市场份额,Opera 甚至没有上市。 Opera 用户继续投反对票!!!

标签: javascript opera


【解决方案1】:

看来问题已经解决了https://code.google.com/p/chromium/issues/detail?id=64846

(以后,请测试功能不要嗅探用户代理字符串。)

【讨论】:

  • 是的,我正在检查功能,请参阅对原始问题的回复。我觉得最好让用户知道“不支持 opera”,而不是“不支持 hasFocus 功能”,但就像你说的,hasFocus 现在正在 Opera 上工作。我会检查功能。谢谢
【解决方案2】:

使用这个:

var nVer = navigator.appVersion;
var nAgt = navigator.userAgent;
var browserName  = navigator.appName;
var fullVersion  = ''+parseFloat(navigator.appVersion); 
var majorVersion = parseInt(navigator.appVersion,10);
var nameOffset,verOffset,ix;

// In Opera, the true version is after "Opera" or after "Version"
if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
 browserName = "Opera";
 fullVersion = nAgt.substring(verOffset+6);
 if ((verOffset=nAgt.indexOf("Version"))!=-1) 
   fullVersion = nAgt.substring(verOffset+8);
}
// In MSIE, the true version is after "MSIE" in userAgent
else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
 browserName = "Microsoft Internet Explorer";
 fullVersion = nAgt.substring(verOffset+5);
}
// In Chrome, the true version is after "Chrome" 
else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
 browserName = "Chrome";
 fullVersion = nAgt.substring(verOffset+7);
}
// In Safari, the true version is after "Safari" or after "Version" 
else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
 browserName = "Safari";
 fullVersion = nAgt.substring(verOffset+7);
 if ((verOffset=nAgt.indexOf("Version"))!=-1) 
   fullVersion = nAgt.substring(verOffset+8);
}
// In Firefox, the true version is after "Firefox" 
else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
 browserName = "Firefox";
 fullVersion = nAgt.substring(verOffset+8);
}
// In most other browsers, "name/version" is at the end of userAgent 
else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < 
          (verOffset=nAgt.lastIndexOf('/')) ) 
{
 browserName = nAgt.substring(nameOffset,verOffset);
 fullVersion = nAgt.substring(verOffset+1);
 if (browserName.toLowerCase()==browserName.toUpperCase()) {
  browserName = navigator.appName;
 }
}
// trim the fullVersion string at semicolon/space if present
if ((ix=fullVersion.indexOf(";"))!=-1)
   fullVersion=fullVersion.substring(0,ix);
if ((ix=fullVersion.indexOf(" "))!=-1)
   fullVersion=fullVersion.substring(0,ix);

majorVersion = parseInt(''+fullVersion,10);
if (isNaN(majorVersion)) {
 fullVersion  = ''+parseFloat(navigator.appVersion); 
 majorVersion = parseInt(navigator.appVersion,10);
}

document.write(''
 +'Browser name  = '+browserName+'<br>'
 +'Full version  = '+fullVersion+'<br>'
 +'Major version = '+majorVersion+'<br>'
 +'navigator.appName = '+navigator.appName+'<br>'
 +'navigator.userAgent = '+navigator.userAgent+'<br>'
)

你会得到这样的输出:

Browser name = Google Chrome
Full version = 31.0.1650.57
Major version = 31
navigator.appName = Netscape
navigator.userAgent = Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    相关资源
    最近更新 更多