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

标签 javascript ruby-on-rails turbolinks

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

这行不通。

非常欢迎提出建议:)

最佳答案

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

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

更新 根据UserReport's docs javascript 片段应属于 head 部分。要以相同的方式执行此操作,如他们的示例所示,您可以将脚本放在“userreport”部分中,并在应用程序的布局模板中使用该部分:

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

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

相关文章:

ruby-on-rails - 动态处理参数的语法

javascript - 使用 Turbolinks 使哈希链接在 Chrome 中工作

jquery - 如何在 Rails 上启用 Turbolinks 的情况下通过 AJAX 正确渲染部分内容?

Javascript 音频无法在移动设备上运行

javascript - 如何在 bootstrap 4 datepicker 上更改语言

javascript - 初学者 Node.JS,未按预期返回

ruby-on-rails - Rails Controller 中实例变量的作用域是什么?

ruby-on-rails - Web 服务上的 Rails 授权

ruby-on-rails - rails 4 : Google Maps not displaying

java - Kendo UI 简单网格