Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 浏览器嗅探_Javascript_Browser_Browser Detection - Fatal编程技术网

Javascript 浏览器嗅探

Javascript 浏览器嗅探,javascript,browser,browser-detection,Javascript,Browser,Browser Detection,我知道浏览器嗅探不是为多个浏览器设计网站的正确方法。然而,我的问题与设计一个适合每个浏览器的网站无关 如果浏览器是Google Chrome或Firefox 4+,我想让用户能够将网站安装为webapp;如果是Opera,则可以将其作为小部件;如果是Safari,则可以将其作为扩展。。。等等 基本上,我想在一个div中滑动一个按钮,提供这种安装。如果浏览器是例如Safari,那么显示webapp解决方案是没有用的,因为Safari不支持它 那么,我如何才能以一种好的方式做到这一点呢 我发现这是基

我知道浏览器嗅探不是为多个浏览器设计网站的正确方法。然而,我的问题与设计一个适合每个浏览器的网站无关

如果浏览器是Google Chrome或Firefox 4+,我想让用户能够将网站安装为webapp;如果是Opera,则可以将其作为小部件;如果是Safari,则可以将其作为扩展。。。等等

基本上,我想在一个div中滑动一个按钮,提供这种安装。如果浏览器是例如Safari,那么显示webapp解决方案是没有用的,因为Safari不支持它

那么,我如何才能以一种好的方式做到这一点呢

我发现这是基于特性而不是基于useragent的


它似乎适合我的需要,而且短小而不笨重,而且或多或少是安全的

看看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>