Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Turbolinks:body标记内的javascript代码不会按其应有的方式执行_Javascript_Turbolinks - Fatal编程技术网

Turbolinks:body标记内的javascript代码不会按其应有的方式执行

Turbolinks:body标记内的javascript代码不会按其应有的方式执行,javascript,turbolinks,Javascript,Turbolinks,我正在尝试向我的网站添加Turbolinks功能,但我目前面临一个问题。我有一些脚本标记,它们以前位于head部分,在特定页面的页面加载时执行。这些脚本只应在其特定页面上执行一次。当我尝试TurboLink时,这些脚本根本没有执行,除非它们存在于从服务器加载的第一个页面的初始页面中。因此,我将脚本移动到HTML页面正文部分的末尾。以下是我的发现: 1-普通脚本标记: 这导致多次执行代码。因此,如果我加载页面一次,它将正确执行,如果我离开页面,然后返回页面,代码将执行两次。如果我再这样做,它将执行

我正在尝试向我的网站添加Turbolinks功能,但我目前面临一个问题。我有一些脚本标记,它们以前位于head部分,在特定页面的页面加载时执行。这些脚本只应在其特定页面上执行一次。当我尝试TurboLink时,这些脚本根本没有执行,除非它们存在于从服务器加载的第一个页面的初始页面中。因此,我将脚本移动到HTML页面正文部分的末尾。以下是我的发现:

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

2-数据为turbolinks eval=false的脚本标记: 在这种情况下,只有当该脚本是从网站的第一次加载的初始页面调用时,才会执行该脚本,这类似于将脚本添加到头部而不是正文的行为

我只需要执行我的脚本一次,并将其发送到相应的页面


请提供帮助。

若要解决特定于页面的脚本问题,我认为您可以通过在特定的_page.html.erb中添加数据turbolinks track=true来解决此问题,该代码位于标记中:


这样做的一个小缺点是,当turbolinks在特定页面中看到新标签时,它会请求重新加载该页面。

turbolinks文档说标签应该放在节中。@Barmar True,但turbolinks只更新正文标签中的内容。因此,如果我只想为1页添加某些脚本,它必须在正文中。@wael34218从那以后,你有没有想出任何解决方案?我正在尝试类似的方法,将特定于页面的JavaScript放在中,同时将其他应由TurboLink提供服务的资产保留在中。但我遇到了与您相同的问题。嗯,不幸的是,尝试在中实现特定于页面的JavaScript加载似乎根本不符合TurboLink的要求。根据这篇博文,如果你不严格遵循Turbolinks的方式,也就是说,将所有脚本放在部分中,那么很容易搞乱全局范围。
<head>
    <%=  javascript_include_tag "path/to/specific_page_js", "data-turbolinks-track" => true %>
    ...
</head>