在Rails 5应用程序中,每次turbolinks加载事件发生时执行JS

5
每次TurboLinks加载(即页面加载)时,我想执行几行JS代码,而不是从缓存中获取JS,但我希望在TurboLinks加载事件之前强制运行它,每次都要运行。这种可能吗?
我正在尝试消除FOUC,通过隐藏HTML主体并在app.js.coffee中执行此操作。
$(document).on 'turbolinks:load', ->
    document.body.style.visibility = 'visible'

但是在第三或第四次重新载入页面后,FOUC开始出现。

要实时查看此现象,请点击这里访问该网站。

2个回答

2

Turbolinks仅在使用页面上的链接时加载,而不是在刷新页面或通过URL导航时加载。如果您想在页面加载时运行js,则使用$(document).ready(function() { executable js here });


实际上,我们希望在单击启用Turbolinks的链接时运行js,请查看问题中给出的链接上的网站,以查看FOUC的效果。此外,如果您在检查器中注意到整个body被隐藏并再次显示以隐藏FOUC。但是某种程度上时间似乎有点不对。 - Pre-alpha

1
所以,FOUC和turbolinks的结合可能非常恼人。我们最终采取的解决方法是使用内联样式隐藏整个body,并在body中添加了一个脚本标签:
<script type="text/javascript">
        document.body.style.visibility = 'visible'
</script>

这样做可以确保在 turbolinks生效时,仅加载 HTML 的主体部分。因此,在主体内运行的脚本可确保每次出现 turbolinks 加载时都运行 JavaScript。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接