javascript - Turbolinks:body 标记内的 JavaScript 代码未按其应有的方式执行

标签 javascript turbolinks

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

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

2-带有 data-turbolinks-eval=falsescript 标签:
在这种情况下,仅当从初始页面(网站的第一次加载)调用该脚本时,才会执行脚本,这与将脚本添加到 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/

相关文章:

javascript - React Native 上的背景图片和 ScrollView

javascript - Knockout.js if 语句 bool 测试

javascript - 如何使用 Rollup 将 js 文件作为字符串导入?

javascript - RXJS 在嵌套数组中调用 api 并将结果合并到数组中

ruby-on-rails - Ruby on Rails 5 - Turbolink 3 无法正常工作

javascript - Rails 5 中的 Turbolinks 中断 Bootstrap 选择下拉菜单

javascript - 如何使用 kendo ui 的控件和框架使每个列表项可拖动

javascript - TinyMCE - 必须刷新页面

ruby-on-rails - Turbolinks 导致带有 href ="#"的链接触发页面刷新

ruby-on-rails - Turbolinks Rails 5的浏览器后退按钮上的JQuery插件初始化