【问题标题】:Feature detection instead of user-agent sniffing on TV电视上的特征检测而不是用户代理嗅探
【发布时间】:2013-04-09 12:19:03
【问题描述】:

我的团队正在考虑为电视进行开发,并考虑设计一个量身定制的“10 英尺用户界面”,以便在电视机上以不同的方式呈现我们的内容。

此时我看到它发生的唯一方法是通过嗅探用户代理来检测用户来自哪里。我看到有一些可用于电视的用户代理,例如:

AppleTV:

User-Agent: iTunes-AppleTV/4.1

谷歌电视:

Mozilla/5.0 (Linux; GoogleTV x.x.x; LG Google TV Build/000000) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.77 Safari/534.24

但是,除非必须,否则我们不想使用用户代理

在 Mozilla Developer Network 经常提到的这篇文章中,Browser detection using the user agent 他们坚决反对使用用户代理嗅探来提供特殊内容,建议人们宁愿使用特征检测。

电视浏览器/系统上是否有一个单一、稳定且得到良好支持且易于检测的功能?如果有,会是什么?

【问题讨论】:

  • 我使用用户代理来显示/隐藏来自特定设备的内容,但听起来你在这里想要的更像是使用库 Modernizr 和/或响应式 css 框架的功能检测和媒体查询(引导程序/基础)。通过这种方式,您可以在大屏幕上以不同的方式显示您的 UI,而不管正在使用什么(例如,将计算机连接到大屏幕液晶显示器的人将获得与使用 google/apple tv 的人相同的视图)

标签: responsive-design user-agent google-tv apple-tv


【解决方案1】:

由于目前还没有识别浏览器的标准,因此用户代理被大量使用。如果你想避免这样做,你可以尝试像这样使用导航器对象:

var browser = navigator.appName;
var version = navigator.appVersion;

【讨论】:

  • 嗨,Krispy,为您抽出时间回答我的问题而欢呼!很高兴发现您目前在 Google TV 工作,因此我会认真听取您的建议。我不会接受你的回答,因为它没有回答主要问题,而且这种方法可能不如明确使用 TV user-agents 可靠,至少目前不是。我相信其他人会发现这种方法很有用。干杯!
【解决方案2】:

推荐的方式是使用用户代理。这个SO帖子中的第一个答案建议了一个很好的辅助方法。

Detect Google TV without using user agent string

那里提供的小提琴在我测试的 Vizio 盒子上运行良好。

var isGoogleTv = true; var allResults = ''; 函数tryTest(名称,testResult){ var result = (testResult ? 'succeeded' : 'failed'); 所有结果 += '' + 名称 + ''; isGoogleTv = isGoogleTv && testResult; } 函数渲染结果(){ document.write('
    '); document.write(allResults); document.write('
'); 如果(是谷歌电视){ document.write('

检测到谷歌电视!

'); } 别的 { document.write('

不是谷歌电视!

'); } } tryTest('是用户代理 GoogleTV', Boolean(navigator.userAgent.match(/(大屏幕)|GoogleTV/i))); tryTest('不是歌剧', Boolean(window.opera==undefined)); tryTest('不是 IE6+', Boolean(!(document.compatMode && document.all))); tryTest('不是平台Win', !Boolean(navigator.platform.match(/Win/))); tryTest('is vendor Google', Boolean(navigator.vendor.match(/Google/))); tryTest('不是 IE', false); 渲染结果();

【讨论】:

  • 我非常感谢您的回答,并认为很多人会发现它很有用,但我不能接受它是正确的,因为它涉及 user agent 并且因为我最初要求对所有人(或大多数)电视设备。这个解决方案不能作为问题的答案,但正如我已经提到的,我相信有人会发现它对他们的上下文很有用......
猜你喜欢
  • 2016-06-21
  • 2012-02-16
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 2017-10-23
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多