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

3
我正在运行Rails,并且在我的页面的body标签末尾有这段代码。
: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);

这不起作用。

非常欢迎提出建议 :)


应该可以,你确定你的 userReport 函数能正常工作吗? - nathanvda
1
删除 app.js 中的 //require turbolinks,并安装 jquery turbolinks。 - Zippo9
2个回答

2
在body部分的末尾插入脚本,只是每次重新加载body时将script元素插入到html的head部分。我想知道,为什么你要这样做?因为每次点击链接,都会在文档的head部分得到一个重复的script元素(多亏了turbolink的魔力)。这可能是你问题的原因。
如果你真的需要用JavaScript来完成这个任务,请尝试将你的代码添加到app/assets/javascript/application.js的末尾(我知道这不是推荐的做法,但只是为了测试这个想法)。 希望能有所帮助。
更新 根据UserReport文档,JavaScript代码片段应该属于head部分。为了像他们的示例一样做,你可以将脚本放在一个'userreport'局部视图中,并在应用程序的布局模板中使用该局部视图:
<head><%= render 'layots/userreport' %>
</head>

好主意!仅仅重新插入是行不通的,因为会插入重复的脚本,就像你说的那样。他应该找到一种从userreport.com重新触发脚本的方法。我建议:向userreport寻求支持,或者禁用turbolinks ;) - nathanvda
我会给你奖励以表彰你的努力,尽管我仍然没有找到同时让UserReport和Turbolinks工作的方法 =/ 真遗憾我不得不打开Turbolinks才能启用UserReport。 - Jeremy F.

1

很遗憾,userreport.js脚本不支持“重新加载”小部件,因此这是不可能的。

我从CDN中提取了代码,进行了修改,并在我的资源中使用它,以便我可以随时调用reset_user_report();来显示小部件(请参见此存储库:https://github.com/nicolasmlv/userreport-turbolinks

请自行决定使用风险,因为它将不再使用userreport cdn(特性更新/错误修复)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接