【发布时间】:2015-07-11 21:31:11
【问题描述】:
我正在构建一个用于教育目的的网站。我知道 robots.txt 可用于允许或禁止用户代理、查询和目录访问。现在我在一个页面中有一个画布元素,只需要激活特定的用户代理来访问该页面。否则它应该抛出一条错误消息。这可能吗?
【问题讨论】:
标签: html user-agent robots.txt
我正在构建一个用于教育目的的网站。我知道 robots.txt 可用于允许或禁止用户代理、查询和目录访问。现在我在一个页面中有一个画布元素,只需要激活特定的用户代理来访问该页面。否则它应该抛出一条错误消息。这可能吗?
【问题讨论】:
标签: html user-agent robots.txt
您必须使用 Javascript 来执行此操作。
您可以通过以下方式获取浏览器的用户代理:
window.navigator.userAgent
然后您可以选择显示或不显示相应的画布元素。但是,除非您将其包含在 JS 中,否则您将无法直接访问您的 robots.txt。
【讨论】:
robots.txt 文件适用于搜索引擎和其他网络爬虫,而非普通用户。听起来您想针对后者,这使得 robots.txt 不适合此任务。 (此外:这是不可能的,即使您的目标是网络爬虫)。
您必须使用不同的方式来“嗅探”用户的浏览器类型。 JavaScript当然是一个很好的可能性。如果您打算使用在服务器上执行的脚本(PHP 等)做更复杂的事情,您可以使用这些语言为不同的浏览器提供不同的内容。网络上到处都是可能对您有所帮助的教程。
【讨论】:
您已经描述了robots.txt 的用途。它的链接列表必须被忽略,并且不能被网络爬虫索引,这就是它的目的。但是,在网页上,您可以使用 JavaScript 来确定具有 navigator.userAgent 属性的用户代理。
根据您的实现,您可以隐藏 <canvas> 元素并在运行时使用如下简单逻辑检查您的用户代理:
if (window.navigator.userAgent == 'SpecificUserAgent/32')
$("#special-canvas").show();
else
alert("Please come back later with another user-agent.");
现在,唯一的问题是您的“特定用户代理”实际上是什么样的。典型的浏览器用户代理包含一个复杂的构建:
Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/39.0
Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16
所以,如果您只想向后者展示您的画布,您可能需要regular expression:
if(/Chrome\/43/.test(window.navigator.userAgent))
alert("only if user agents contains 'Chrome/43'.");
最后,还有像 User Agent Switcher 这样适用于 Firefox 和其他浏览器的插件,可以让您切换用户代理。您可以在sites that display your UA 或使用alert(window.navigator.userAgent); 轻松查看您当前的浏览器。
【讨论】:
if(window.navigator.userAgent.indexOf('iPad') > -1)。