javascript - 使用 Rails 检查是否启用了 Javascript(服务器端)

标签 javascript ruby-on-rails server-side erb noscript

如何检查 Rails 中是否启用了 javascript?这样我就可以在 View 中做这样的事情:

<div>
    <% if javascript_enabled? %>
    <p>Javascript Enabled!</p>
    <%- else -%>
    <p>No Javascript</p>
    <%- end -%>
</div>

最佳答案

你可以检测到它,但它并不漂亮。

首先,您需要一个新的 Controller ,其中包含更新 session 超时的操作:

class JavascriptController < ApplicationController
  def confirm
    session[:javascript_updated] = Time.now
  end
end

接下来,您需要在所有页面中包含一个 javascript 操作,以便在每次加载页面时调用该 Controller 操作。最简单的方法是将它包含在布局中包含的“javascript-confirm.js”文件中(在这个特定示例中,我使用了 Prototype 的 Ajax.Request,因此您也需要将它包含在您的 javascript 中):

function confirmJavascript()
{
    // Assuming you are using Prototype
    new Ajax.Request('/JavascriptController/confirm');
}

myTimeoutFunction();
setInterval(myTimeoutFunction, 10000); // invoke each 10 seconds

这将在您的所有页面 View 中调用确认操作。最后,您必须控制自上次在应用程序 Controller 中确认以来经过了多少时间。

class ApplicationController < ActionController::Base

JAVASCRIPT_TIME_LIMIT = 10.seconds

before_filter :prepare_javascript_test

private
def prepare_javascript_test
  if (session[:javascript_updated].blank? or
     Time.now - session[:javascript_updated] > ApplicationController::JAVASCRIPT_TIME_LIMIT)
    @javascript_active = true
  else
    @javascript_active = false
  end
end

end

您现在将在所有 Controller 中拥有一个名为 @javascript_active 的变量。

即使用户激活/停用 javascript,它也应该可以工作,精度为 10 秒。如果您的某些页面加载时间超过 10 页(即包含大量图像),它可能无法正常工作。在这种情况下增加时间限制(在 applicationcontroller 和你的 javascript 上)

免责声明:我尚未测试此代码,可能潜伏着一些错误 - 但它应该为您指明正确的方向。

关于javascript - 使用 Rails 检查是否启用了 Javascript(服务器端),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2315648/

相关文章:

javascript - Mocha : get stacktrace when running mocha programmatically

javascript - Rails 中的 Bootstrap 4 模态表单禁用 ajax 刷新时的提交按钮

node.js - 在Node.js上响应客户端的正确方法?

JavaScript 字符串替换为来自以 param 作为正则表达式捕获组的 lodash 函数返回的替换

javascript - 循环淡入淡出的div

ruby-on-rails - 跳过与 simple_form 关联的包装器

jquery - Javascript 在第一次加载时不起作用

PHP - 永远为 "live"的服务器端变量?

javascript - 客户端和服务器端编程有什么区别?

javascript - 对于某些 HTML 内容,点击事件在 Safari Mobile 中不起作用