UserReport和Turbolinks - 如何使JS turbolinks兼容?

时间:2015-01-15 22:13:08

标签: javascript ruby-on-rails turbolinks

我正在运行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);

这不起作用。

非常欢迎建议:)

2 个答案:

答案 0 :(得分:2)

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

如果您确实需要通过javascript执行此操作,请尝试在app / assets / javascript / application.js的末尾添加您的代码(不推荐,我知道,但只是为了测试这个想法)。 希望它有所帮助。

<强>更新 根据{{​​3}},javascript代码段应属于head部分。要以相同的方式执行此操作,因为它们在示例中显示,您可以将脚本放在“userreport”部分内部并使用该部分内部应用程序的布局模板:

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

答案 1 :(得分:1)

不幸的是,userreport.js脚本没有启用&#34;重新加载&#34;小部件,所以这是不可能的。

我从CDN中提取代码,对其进行修改并在我的资产中使用它,以便每当我想要显示小部件时我都可以调用reset_user_report();(请参阅此回购:https://github.com/nicolasmlv/userreport-turbolinks

使用风险自负,因为它不再使用用户报告cdn(功能更新/错误修复)