如何从Rails中检测客户端是否启用/禁用了JavaScript?

3

我不想处理那些关闭了JavaScript的用户,所以我想阻止他们使用我的应用程序。我希望检测用户是否已经打开了JavaScript,以便将其重定向到一个页面,告诉他们需要使用JavaScript。我相信这个信息在请求头中。有人有任何想法如何实现吗?


4
我确定,它不在请求头中。 ;) - Nappy
4
讽刺并没有什么用。还是谢谢你。 - aarona
6个回答

6

noscript标签是最简单的解决方案,但并不完全符合您的要求。

<noscript>Get outta here.</noscript>

谢谢。你似乎是唯一一个回答/询问关于Rails的人。 - aarona

3

您真的需要重定向吗?将消息放在<noscript>元素中,只有适用于该消息的人才能看到。


3
你无法做到。服务器不知道客户端已启用什么。你甚至无法“检测”客户端是否禁用了Javascript(因为你会用什么去检测呢?)。
可以使用一些技巧在Javascript被禁用时显示内容(例如,使用<noscript>标签,或使用Javascript隐藏只针对JS的内容)。

3

无法在服务器端检测JavaScript。但是,您可以使用NOSCRIPT标签显示一个消息,指示您的网站需要JavaScript。

例如,在浏览器中关闭JavaScript并加载Stack Overflow页面。页面顶部会有一个显眼的红色消息警告您启用JavaScript以获得最佳体验。您可以查看Stack Overflow源代码和CSS样式以了解它们如何实现。

如果您真的想阻止非JavaScript用户使用您的网站,您可以将消息放在noscript标签内的div中,并将div扩展到覆盖页面上的所有内容。


1
你可以创建一个带有 JavaScript 片段的落地页,该片段会运行并重定向到真正的 Railsy 落地页,或者执行 AJAXY 调用以获取要向用户显示的数据。这将积极地要求启用 JavaScript 才能继续。

1

你只需要HTML:

<noscript><meta http-equiv="refresh" content="0;url=http://example.com/use_js.html" /></noscript>

当然,这不会阻止服务器提供内容,它只会输出这个 meta refresh 标签,这将被那些没有 JavaScript 或已禁用 JavaScript 的客户端解析(并通过重定向用户执行)。

3
noscript 不能在文档的head中,meta 不能在文档的 body 中。在某些浏览器中仍可正常工作,但这种解决方案可能被一些人(像全知的 W3C 验证器)视为无效。 - Cristian Sanchez

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