如果我在我的页面的<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后显示。除此之外,它只会在看似缓存在一些页面加载后刷新时显示。这是一个涡轮机问题吗?我怎样才能纠正它,以便每次都加载?
答案 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
}
});