将 HTML 元素添加到 robots.txt

Adding a HTML element to the robots.txt

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

您必须使用 Javascript 执行此操作。

您可以通过以下方式获取浏览器的用户代理:

window.navigator.userAgent

然后您可以相应地选择显示或不显示 canvas 元素。不过,您无法直接访问 robots.txt,除非您将其包含在 JS 中。

Documentation

robots.txt 文件适用于搜索引擎和其他网络爬虫,不适用于普通用户。听起来您想针对后者,这使得 robots.txt 不适合此任务。 (此外:这是不可能的,即使您的目标是网络爬虫)。

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

您已经描述了 robots.txt is for. Its list of links must be ignored and not be indexed by webcrawlers, this is its purpose. On a web page however, you can use JavaScript to determine the user-agent with the 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

因此,如果您只想向后者展示您的 canvas,您可能需要一个 regular expression:

if(/Chrome\/43/.test(window.navigator.userAgent))
    alert("only if user agents contains 'Chrome/43'.");

最后,还有像 User Agent Switcher for Firefox and other browsers that let you switch your user agent. Your browser’s current one can easily be seen at sites that display your UA 或使用 alert(window.navigator.userAgent); 这样的插件。