2015-07-11 115 views
0

我正在构建一个用于教育目的的网站。我知道robots.txt可以用来允许或禁止用户代理,查询和目录访问。现在我在一个页面中有一个画布元素,只需要使用特定的用户代理来访问该页面。否则它应该抛出一个错误信息。这可能吗?将一个HTML元素添加到robots.txt

回答

3

你必须用Javascript来做到这一点。

window.navigator.userAgent

然后,您可以选择显示或不显示相应的canvas元素:

您可以通过获取浏览器的用户代理。你不会直接访问你的robots.txt,除非你把它包含在JS中。

Documentation

+0

感谢您的快速回复并指出了这一事实。真的很感激:) –

0

的robots.txt文件适用于搜索引擎和其他网络抓取工具,而不是为普通用户。这听起来像你想瞄准后者,这使得robots.txt不适合这项任务。 (此外:即使您的目标是网页抓取工具,也不可能)。

您必须使用不同的方式来“嗅探”用户的浏览器类型。 JavaScript当然是一个很好的可能性。如果你打算在服务器上执行更复杂的脚本(PHP等),你可以使用这些语言为不同的浏览器提供不同的内容。网络充满了对你有帮助的教程。

0

您已经描述了robots.txt的用途。它的链接列表必须被忽略,并且不会被webcrawlers索引,这是它的目的。但是,在网页上,您可以使用JavaScript来确定具有navigator.userAgent属性的用户代理。

根据您的实现,您可以隐藏<canvas>元素,并在运行时用一个简单的逻辑是这样检查您的user-agent:

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'."); 

最后,是Firefox的其他浏览器,例如User Agent Switcher的插件,可让您切换用户代理。您的浏览器当前的浏览器可以很容易地在sites that display your UA或使用alert(window.navigator.userAgent);

+0

我试过这个。我为谷歌浏览器安装了User-Agent Switcher。尝试了自定义和给定的用户代理。当我使用这个代码时,我总是会得到“未知浏览器”。 功能测试(){ \t \t \t if(window.navigator。userAgent ==“iPad”){ \t \t \t \t alert('iPad Detected'); \t \t \t} \t \t \t其他{ \t \t \t \t警报( '未知的浏览器'); \t \t \t} \t \t} 我这么想吗? –

+0

iPad的用户代理更为复杂(例如,请参阅[本答案](http://stackoverflow.com/a/2248420/2083613)),它不会只是“iPad”。立即修复将是'if(window.navigator.userAgent.indexOf('iPad')> -1)'。 – dakab

+0

iPad只是一个例子,我试过opera,也就是说,firefox,custom总是返回false –