我正在运行rails,并且在代码标签的末尾有此代码。

:javascript
  var _urq = _urq || [];
  _urq.push(['initSite', 'mySiteId']);
  (function() {
  var ur = document.createElement('script'); ur.type = 'text/javascript'; ur.async = true;
  ur.src = ('https:' == document.location.protocol ? 'https://cdn.userreport.com/userreport.js' : 'http://cdn.userreport.com/userreport.js');
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ur, s);
  })();

无论我做什么,单击任何和所有启用了Turbolink的链接都会破坏此代码。该按钮消失。

我尝试将代码封装在名为userReport的函数中,然后执行以下操作:
$(document).ready(userReport);
$(document).on('page:load', userReport);

这是行不通的。

建议非常欢迎:)

最佳答案

您在主体部分末尾的脚本仅在每次重新加载script时将head元素插入到html的body部分中。我想知道,为什么您需要这样做?因为,每次单击链接时,您都会在doc的script部分获得一个重复的head元素(这要感谢Turbolink的魔力)。这可能是您遇到问题的原因。

如果您确实需要使用javascript来执行此操作,请尝试将代码添加到app / assets / javascript / application.js的末尾(我不建议这样做,只是为了验证这一点)。
希望能帮助到你。

更新
根据UserReport's docs,JavaScript代码段应属于head部分。要以相同的方式进行操作(如示例所示),您可以将脚本放置在“userreport”部分中,并在应用的布局模板中使用该部分:

<head>
  …
  <%= render 'layots/userreport' %>
</head>

关于javascript - UserReport和Turbolinks-如何使JS Turbolink兼容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27973980/

10-09 21:10