【发布时间】:2009-04-13 22:22:57
【问题描述】:
我正在创建一个使用 Rails 内置辅助函数向站点添加 ajax 功能的 Web 应用程序。我不希望用户能够在没有 JS 的情况下使用该应用,因为它无法正常运行。
我需要能够防止这种情况发生。我怎样才能阻止用户在没有 JS 的情况下加载我的任何页面?
我尝试在布局中使用标签。这会检测到 JS 的缺失,但仍会呈现视图。将脚本标签放在 yield 周围可以防止呈现任何视图。
关于如何做到这一点的任何想法?
【问题讨论】:
我正在创建一个使用 Rails 内置辅助函数向站点添加 ajax 功能的 Web 应用程序。我不希望用户能够在没有 JS 的情况下使用该应用,因为它无法正常运行。
我需要能够防止这种情况发生。我怎样才能阻止用户在没有 JS 的情况下加载我的任何页面?
我尝试在布局中使用标签。这会检测到 JS 的缺失,但仍会呈现视图。将脚本标签放在 yield 周围可以防止呈现任何视图。
关于如何做到这一点的任何想法?
【问题讨论】:
您可以在 head 元素中包含一个带有元刷新标记的 noscript 块。示例:
<head>
<!-- title, scripts, css etc go here -->
<noscript>
<meta http-equiv="refresh" content="2;url=http://yoursite.com/nojswarning.html">
</noscript>
</head>
您可以阅读有关元刷新的更多信息here
希望对你有帮助
编辑:为了澄清,noscript 标记仅在用户关闭 JavaScript 时运行。所以在这种情况下,如果 JS 被关闭,用户将被重定向到http://yoursite.com/nojswarning.html。当然,您可以将其更改为您想要的任何网站上的任何页面。
【讨论】:
public/ 目录中创建了一个javascriptdisabled.html 文件,该文件与500.html 错误页面具有相同的样式。然后使用<meta http-equiv="refresh" content="2;url=#{ root_url + "javascriptdisabled.html" }">根据你所处的环境动态生成URL。
简单的答案是通过 JS 加载整个应用程序。这样一来,该应用将永远不会显示给启用了 JS 的人。
另一种方法是使用 iframe 开始您的页面,该 iframe 会加载到 JS 检查页面。该页面所做的只是通过 JS 将用户重定向到应用程序的真实 URL。因此,如果用户没有 JS,他们将不会被重定向(您可以通知他们他们需要带有
【讨论】:
<noscript></noscript> 似乎可以工作。我会将默认设置为带有覆盖的小型加载器,如果客户端不支持 javascript,则 javascript 永远不会隐藏加载器。 <noscript> 标记中的内容将与叠加层一起显示。
【讨论】: