不使用用户代理字符串检测Google TV

3
我们有一个客户想要在Google TV(通过Chrome浏览器)上展示他们的内容,但是由于法律限制不能在“常规网页”上显示。因此我们想要检测Google TV浏览器,如果不是,则禁止播放内容。
最初的想法是检查用户代理字符串,但显然他们不喜欢这样做,因为用户可以在其Web浏览器上更改其用户代理字符串,使其伪装成Google TV浏览器。那么是否有其他内容可以检查,而且更难(或至少不那么明显)被伪造?我知道任何解决方案都可以通过足够的努力来绕过它,这没问题。

2
有趣的是,客户试图通过说Google电视上的Chromo不是“常规网络”,来规避法律协议,但他们对用户打破默认浏览器配置感到困扰。听起来你正在帮助他们违反法律,并且当某些人对“网络”有问题时,你将成为替罪羊。 - blunders
1
不会帮助任何人违法。如果有什么问题,那就是找到合同中的灰色地带。合同中有区分电视和台式电脑的语言。最坏的情况是内容所有者会要求他们根本不支持Google TV。 - rob
这可能不是全部,但可能会有所帮助。请让您的观众接受您的条款和条件,他们必须同意他们正在使用 Google 电视观看内容。 - Ray Cheng
3个回答

2

由于您只想确保检测到没有使用GoogleTV浏览器的用户,因此可能有一些事情可以做。当然,这些可以被欺骗,但比仅使用不同的用户代理字符串要难得多。

基本上,想法是测试某些JavaScript对象支持(请参见此页面:http://www.javascriptkit.com/javatutors/objdetect3.shtml,获取一些想法)。其中一个示例是测试是否存在window.opera,这将表明浏览器确实是Opera,而绝对不是GoogleTV。

为此,我编写了一个小型的fiddle示例,在所有现代浏览器中都无法通过用户代理切换来伪造,并且需要更复杂的机制才能绕过。我已经测试过,它在Google TV上通过了测试。

http://jsfiddle.net/XBT4w/2/


0

我觉得没有比Google建议的更好的方法了:

var userAgent = navigator.userAgent;

function isGoogleTvBrowser(useragent) {
  return Boolean(useragent.match(/(Large Screen)|GoogleTV/i));
}

虽然显然,用户代理字符串可以非常容易地被伪造。


1
是的,那行不通,因为“非常容易伪造”无法满足律师的要求。:( 不过他们好像可以接受“有点难以伪造”的情况。 - rob
@rob:我理解,只是想提供一些具体的文档。祝你好运! - Josh

0

在编程方面,尤其是在 JavaScript 中,你能够想到的任何东西都会非常容易地被伪造,因为人们可以轻松地(通过控制台)粘贴代码来将任何值注入到任何位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接