首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 6与Turbolinks和Facebook客户聊天

Rails 6与Turbolinks和Facebook客户聊天
EN

Stack Overflow用户
提问于 2021-04-20 12:16:49
回答 1查看 118关注 0票数 0

我有脸书上的代码

代码语言:javascript
复制
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
  FB.init({
    xfbml            : true,
    version          : 'v10.0'
  });
};

(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = 'https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js';
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

<!-- Your Chat Plugin code -->
<div class="fb-customerchat"
  attribution="install_email"
  page_id="My_page_id"
  theme_color="#4A50E1">
</div>

它一见钟情,但如果我移动到另一个页面(使用turbolinks),Facebook聊天就会消失。我尝试了Turbolinks 5.0 and Facebook SDK的解决方案,但在这种情况下,Facebook聊天却一次又一次地产生。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-01-19 10:20:54

index.html:(替换"ID")

代码语言:javascript
复制
<div id="fb-root" data-turbolinks-permanent></div>
<div id="fb-customer-chat" data-turbolinks-permanent class="fb-customerchat" page_id="<ID>" attribution="biz_inbox"></div>

<script type="text/javascript">
  window.fbAsyncInit = function() {
    FB.init({
      xfbml: true,
      version: 'v11.0'
    });
  };

  (function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s);
    js.id = id;
    js.src = 'https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js';
    fjs.parentNode.insertBefore(js, fjs);
  }(document, 'script', 'facebook-jssdk'));
</script>

application.js:

代码语言:javascript
复制
let fbRoot;

function saveFacebookRoot() {
  const temp = document.querySelector("#fb-root");
  if (temp) {
    temp.querySelector("[data-turbolinks-no-cache]")?.remove();
    fbRoot = temp;
    temp.remove();
  }
}

function restoreFacebookRoot() {
  if (fbRoot != null) {
    const temp = document.querySelector("#fb-root");
    if (temp) {
      temp.replaceWith(fbRoot);
    } else {
      document.querySelector("body").append(fbRoot)
    }
  }
}

document.addEventListener("turbolinks:request-start", saveFacebookRoot);
document.addEventListener('turbolinks:load', restoreFacebookRoot}

基础资源https://github.com/turbolinks/turbolinks/issues/596

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67178773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档