这很奇怪。有什么想法吗?
我还应该注意,它在我们开发人员的本地计算机上运行正常,而不是在实时站点中。
答案 0 :(得分:5)
问题几乎肯定是Turbolinks
的问题Turbolinks问题的典型定义是,如果它只在你点击链接时发生(IE"而不是刷新"),它将由Turboinks引起。我在一分钟内解释了原因,但首先,让我们看一下问题所在:
错误强>
我点击了页脚链接,页面确实变为空白
有趣的是,它向我显示页面的<body>
元素已被删除:
现在几乎可以肯定是Turbolinks的错误(正如我将在下面解释的那样)。那是什么造成的呢?
可能有多种原因 - 但是有一个原因是您在<script>
元素中直接添加了<body>
标记这一事实:
我相信这可能是问题所在。无论是这个,还是没有正确结束</body>
标签,都会导致Turbolinks陷入困境。解决此问题的方法是制作Javascript unobtrusive,以确保按顺序包含所有标记
所以我在这里解决了这个问题:
-
<强>修正强>
首先,将您的Javascript放入asset pipeline
:
#app/assets/javascripts/application.js
//Pikwik
var pikwik = function() {
var pkBaseURL = (("https:" == document.location.protocol) ? "https://statsbox.info/" : "http://statsbox.info/");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 25);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
};
$(document).on("page:load ready", pikwik);
混淆JQuery和amp;的道歉JS - 我觉得正确的做法是强调你需要保持它只在请求开始时加载。查看PikWik代码本身,它似乎会在页面上附加script
标记 - 这意味着如果您希望它与Turbolinks一起使用,则必须在页面加载过程的最开始时完成
这将与您一起确保您</body>
标记正确关闭
<强> Turbolinks 强>
为了让您了解Turbolinks遇到问题的原因,您需要考虑它的工作原理:
Turbolinks可以更快地在您的Web应用程序中建立以下链接。 而不是让浏览器重新编译JavaScript和CSS 在每个页面之间进行更改,它会使当前页面实例保持活动状态 只替换头部的正文和标题。想想CGI vs 持久的过程。
这基本上意味着每次使用Turbolinks加载页面时,它只会加载新页面的<body>
标记,而<head>
保持不变。
问题在于,如果您希望加载的任何<body>
标记内都有动态脚本,则会导致冲突。这就是我认为在这里发生的事情 - 你可以用上面的建议来解决这个问题