Turbolinks:body标签内的javascript代码不会按原样执行

时间:2013-12-13 16:57:28

标签: javascript turbolinks

我正在尝试将Turbolinks功能添加到我的网站,但我目前正面临一个问题。我有script标签,这些标签曾在head部分中,该部分是在特定网页的页面加载时执行的。这些脚本应仅在其特定页面上执行一次。当我尝试使用Turbolinks时,除非它们存在于初始页面(从服务器加载的第一页)中,否则这些脚本根本不会被执行。所以我将脚本移动到HTML页面的body部分的末尾。以下是我的发现:

1-普通script标签:
这导致多次执行代码。因此,如果我加载页面一旦它将正确执行,如果我离开页面然后回到它,代码将执行两次。如果我再次这样做,那么它将执行3次...等。代码正在从以VM开头并以5位数结尾的源执行,例如每次以chrome创建的示例VM29823它会在script内访问包含body标记的网页。即使您导航到不同的页面,也会执行这些脚本,例如,如果我使用脚本SA访问页面A,那么SA将执行其他页面B和C的上载。这当然是不可取的。

带有script的{​​p> 2- data-turbolinks-eval=false代码:
在这种情况下,script仅在从初始页面(网站的第一次加载)调用该脚本时才执行,这类似于将脚本添加到头部而不是主体的行为。 / p>

我只需要执行一次脚本并执行相应的页面。

请帮忙。

1 个答案:

答案 0 :(得分:0)

要解决您的页面特定脚本问题,我认为您可以通过添加data-turbolinks-track = true来解决此问题,使用此代码(在您的specific_page.html.erb中),放在<head>标记内:

<head>
    <%=  javascript_include_tag "path/to/specific_page_js", "data-turbolinks-track" => true %>
    ...
</head>

这样做的一个小缺点是,当在特定页面中看到新的<script>时,turbolink会请求页面重新加载。