Javascript 浏览器嗅探
我知道浏览器嗅探不是为多个浏览器设计网站的正确方法。然而,我的问题与设计一个适合每个浏览器的网站无关 如果浏览器是Google Chrome或Firefox 4+,我想让用户能够将网站安装为webapp;如果是Opera,则可以将其作为小部件;如果是Safari,则可以将其作为扩展。。。等等 基本上,我想在一个div中滑动一个按钮,提供这种安装。如果浏览器是例如Safari,那么显示webapp解决方案是没有用的,因为Safari不支持它 那么,我如何才能以一种好的方式做到这一点呢 我发现这是基于特性而不是基于useragent的Javascript 浏览器嗅探,javascript,browser,browser-detection,Javascript,Browser,Browser Detection,我知道浏览器嗅探不是为多个浏览器设计网站的正确方法。然而,我的问题与设计一个适合每个浏览器的网站无关 如果浏览器是Google Chrome或Firefox 4+,我想让用户能够将网站安装为webapp;如果是Opera,则可以将其作为小部件;如果是Safari,则可以将其作为扩展。。。等等 基本上,我想在一个div中滑动一个按钮,提供这种安装。如果浏览器是例如Safari,那么显示webapp解决方案是没有用的,因为Safari不支持它 那么,我如何才能以一种好的方式做到这一点呢 我发现这是基
它似乎适合我的需要,而且短小而不笨重,而且或多或少是安全的看看jQuery.browser: $.browser属性提供 有关使用的web浏览器的信息 正在访问页面,如报告所述 浏览器本身。它包含旗帜 对于四个最普遍的 浏览器类(Internet Explorer、, Mozilla、Webkit和Opera)以及 版本信息 可用的标志有: webkit(从jQuery 1.4开始)safari (已弃用)opera msie mozilla此 酒店可立即入住。信息技术 因此,使用它来 决定是否打电话 $(document).ready()。美元浏览器 属性在jQuery 1.3中不推荐使用, 并且其功能可以移动到 未来团队支持的插件 jQuery的发布 因为$.browser使用 navigator.userAgent来确定 平台,它容易受到欺骗 由用户提供或由 浏览器本身。它总是最好的 避免使用特定于浏览器的代码 尽可能地完全。美元支持 属性可用于检测 支持特定功能,而不是 而不是依赖$.browser
不要担心什么是正确的。做有用的事;在这种情况下,浏览器嗅探可能是最好的或唯一的好选择。我从未理解仅仅使用navigator对象的属性的问题:
<script>
for(var item in navigator)
{
document.write('navigator.' + item + ': ' + navigator[item] + '<br>');
}
</script>
for(导航器中的变量项)
{
document.write('navigator.+item+':'+navigator[item]+'
');
}
他们说navigator.userAgent
是不可靠的,但如果你研究一下,它可以与navigator.appName
和navigator.vendor
结合使用,我想这是很可靠的
更新日期:2013年3月 你必须直接测试你想知道的东西,如果你试图推断它,你就错了 比如说。如果要使用某个功能,请直接对其进行测试,不要假设如果
document.all
,则可以使用document.uniqueID
。直接测试文档.唯一ID
每个人都知道使用navigator.userAgent
来确定是否可以使用window.localStorage
是愚蠢的,但他们没有意识到ie7:document.all&&window.XMLHttpRequest&!XDomainRequest&!opera也在反方向做同样的事情
不幸的是,如果您确实想知道用户代理是什么,那么您只能使用navigator
对象
用户代理字符串欺骗不是问题,反正也不是您的问题。您可以尝试:BrowserHawk
,(),它在服务器端执行浏览器检查。这将从理论上减少在决定向最终用户显示什么时浏览器端的处理。然而,我不认为这是免费的。他们的特色客户包括雅虎、美国在线、思科、微软和太阳。因此,这仅用于生产使用,最终用户访问该网站的期望值较高。这是可以被欺骗的,这也是为什么它被欺骗的一部分原因unreliable@Stofke字体任何东西都可以篡改。你只需要一个像样的十六进制编辑器就可以了。你所有的检测机制都可能被破坏。我的建议是,在这种情况下,不要担心少数人。问题本身目前所述的方法是否可行?我的意思是,它们不依赖于用户代理或其他什么,它们依赖于特定浏览器支持的内置功能。它们怎么能被篡改?@Cupidvogel:好吧,让我们忽略一个事实,即浏览器内置功能支持可能会发生变化。让我们以window.globalStorage
为例。可以编写一个浏览器扩展来定义任何浏览器中的所有页面,因此如果定义了window.globalStorage
,则不一定保证浏览器是Firefox。什么?用户可以为其浏览器的所有页面添加JS扩展吗?太可怕了!这就是我对good的意思;-)你是对的,一些功能可能会得到其他浏览器的支持,使得基于功能的解决方案也不可靠。但是这是我现在能想到的最好的方法了,因为我已经使用了Jquery,但是在Chrome中它是可以被屏蔽的,spoofingis.safari==true(或者我需要一个Chrome升级版)。为什么你想成为防欺骗的呢?你真的想过吗?人们为什么要恶搞?我从来都不需要,但如果有人想在Firefox中下载你的Opera小部件,让他们下载,他们可能有正当的理由。我不认为欺骗者会抱怨,如果有些事情不起作用,那实际上是他们自己做的。这段代码中有几个错误。你能说得更清楚些吗?您希望针对哪些浏览器版本?Opera、Safari、Firefox、Chrome(所有浏览器的最新版本)下次使用@knu时,我会回答您的问题。
<script>
for(var item in navigator)
{
document.write('navigator.' + item + ': ' + navigator[item] + '<br>');
}
</script>