我正在尝试将 Turbolinks 功能添加到我的网站,但我目前遇到问题。我有 script
标签,这些标签曾经位于 head
部分,该标签在特定页面的页面加载时执行。这些脚本应该只在其特定页面上执行一次。当我尝试 Turbolinks 时,这些脚本根本不会被执行,除非它们存在于初始页面(从服务器加载的第一个页面)中。因此,我将脚本移至 HTML 页面的 body
部分的末尾。以下是我的发现:
1-普通script
标签:
这导致多次执行代码。因此,如果我加载页面一次,它将正确执行,如果我离开该页面然后返回该页面,则代码将执行两次。如果我再次这样做,那么它将执行 3 次...等等。代码是从以 VM
开头并以 5 位数字结尾的源执行的,例如 VM29823
每次访问 body
内带有 script
标记的页面时,都会在 chrome 中创建。即使您导航到不同的页面,这些脚本也会执行,例如,如果我使用脚本 SA 访问页面 A,那么 SA 将在加载其他页面 B 和 C 时执行。这当然是不可取的。
2-带有 data-turbolinks-eval=false
的 script
标签:
在这种情况下,仅当从初始页面(网站的第一次加载)调用该脚本时,才会执行脚本,这与将脚本添加到 head 部分而不是添加到 head 部分的行为类似。 body 。
我只需执行一次脚本并执行到相应的页面。
请帮忙。
最佳答案
为了解决页面特定的脚本问题,我认为您可以通过添加 data-turbolinks-track=true 与此代码(在您的 Specific_page.html.erb 中)来解决它,放置在 <head>
中标签:
<head>
<%= javascript_include_tag "path/to/specific_page_js", "data-turbolinks-track" => true %>
...
</head>
这样做的一个小缺点是,turbolinks 在看到新的 <script>
时会请求页面重新加载。在特定页面中。
关于javascript - Turbolinks:body 标记内的 JavaScript 代码未按其应有的方式执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20571905/