【问题标题】:Ruby on Rails, appending jQuery DataRuby on Rails,附加 jQuery 数据
【发布时间】:2017-02-25 21:19:47
【问题描述】:

有没有一种方法可以将数据附加到 Rails 中的元素,如 jQuery。 例如,如果你有

var element = $('element');
element.data('i', 'Hello world');

在 jquery 中,您可以稍后检索该数据:

console.log(element.data('i));

会导致

世界你好

这样,它将信息存储在一个不起眼的地方,从而导致无法从 jQuery 外部直接访问的变量。

相反,现在我只知道使用 Rails 附加 HTML 数据属性:

<%= content_tag(:div, "Something", data: { i: 'Hello world' }) %>

这相当于在 jQuery 中设置 .attr()

设置 HTML 数据属性会导致:

  • 检查时元素的可见性
  • 不能是对象

所以本质上,我想在这里问的是,我可以在 Rails 中附加 jQuery 数据集吗:

  • 只能从.data()访问
  • 无法从 .attr() 或其他任何地方访问
  • 检查时元素上不公开可见

【问题讨论】:

  • 数据属性有什么问题?
  • @muistooshort 可以在源码中查看。
  • 任何存储在客户端的东西都很容易看到。客户端中可访问的任何内容都很容易看到。

标签: javascript jquery html ruby-on-rails


【解决方案1】:

有没有办法像 jQuery 一样将数据附加到 Rails 中的元素上

例子:

# in your view *.html.erb
<%= content_tag(:div, "Content", data: { whatever: 42, whenever: "5pm" }) %>

结果:

<div data-whatever="42" data-whenever="5pm">Content</div>

【讨论】:

    【解决方案2】:

    选项 1

    看看gon,它让在JavaScript 中访问Rails 变量变得非常简单。它不会将它们附加为data 属性,但同时您将数据一次性发送到客户端,因此它将在页面源中可用。

    (这个Railscast episode 还引导您完成设置,以及它是如何工作的)

    选项 2

    如果您确实需要隐藏/混淆数据(我假设这是来自抓取工具,所以这就是我将在这里重点介绍的内容),并且您不想在客户端执行此操作,那么您需要在 Rails 应用程序中设置新路由,并对该端点执行 AJAX 调用以返回数据。这不是万无一失的,但这里有一些选项可以让爬虫更难处理。

    【讨论】:

      【解决方案3】:

      最好的办法是使用 Javascript 类并将它们作为“变量”或方法调用存储在对象上。在 Javascript: The Good Parts 一书中关于类的部分中有一个很好的例子。

      尽管如果有人真的想了解变量,这些变量仍然可以访问,但更加模糊。另一种方法是通过 Javascript 来利用本地会话,仍然可以由客户端检索,但有些混淆。基本上,如果您在客户端执行此操作,则安全性是一个难以破解的难题。

      另外,FWIW 您的问题与 Rails 无关,这都是客户端 Javascript,尽管它可能在基于 Rails 的 Web 应用程序中,但它仍然是 Javascript。

      您可以做的一个选择是对 Rails 后端进行 AJAX 调用,以通过特定的 Rails 路由(即 API)检索数据,但我不确定这是否能满足您的需求。

      【讨论】:

      • 是的,我自己再次阅读后认为我的问题没有意义。好点。
      猜你喜欢
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 2010-09-18
      • 2018-06-25
      • 1970-01-01
      相关资源
      最近更新 更多