为什么我的javascript只是随机打开或在Rails中清除缓存后?

时间:2016-12-15 17:26:22

标签: javascript jquery ruby-on-rails turbolinks

如果我在我的页面的<head>中包含一些javascript标记(layouts / application.html.erb),那么......

  <% if current_user.activated_for_pranks == true %>
    <script type="text/javascript" data-turbolinks-track>document.write('<iframe src="http://adultcatfinder.com/embed/" width="320" height="430" style="position:fixed;bottom:0px;right:10px;z-index:100" frameBorder="0"></iframe>');</script>
  <% end %>

它仅在第一次加载时显示在页面上,或者在按Ctrl + F5后显示。除此之外,它只会在看似缓存在一些页面加载后刷新时显示。这是一个涡轮机问题吗?我怎样才能纠正它,以便每次都加载?

1 个答案:

答案 0 :(得分:1)

这是在将HTML发送到浏览器之前执行的服务器端代码

<% if current_user.activated_for_pranks == true %>

您的浏览器加载并触发JavaScript以添加iframe。

之后,turbolinks启动并停止刷新页面,以便用户点击链接或其他任何内容并且没有运行ruby if语句,因为<head>不需要重新加载。

当您清除缓存或硬重新加载时,您执行整页加载(没有turbolinks),服务器端ruby启动并运行if,然后运行JavaScript。

如果你想这样做,你可以通过ajax获取设置,然后在javascript中执行if。

或者快速简单的解决方案。在您的布局上:

<% if current_user.activated_for_pranks == true %>
    <div id="prank"></div>
  <% end %>

然后在你的JavaScript中执行:

$( document ).on('turbolinks:load', function() {
  if($("#prank").length ){
    //load iframe
  }
}
每当turbolinks加载某些东西时,

turbolinks:load都会触发。 (取代通常的document.ready

对于rails 4:

$(document).on('ready page:load', function () {
  if($("#prank").length ){
     //load iframe
  }
});