4

我正在使用 Like Box 社交插件(https://developers.facebook.com/docs/reference/plugins/like-box/),效果很好。

问题是我在带有 Turbolinks 的 Rails 4 应用程序中使用它。每当我重新加载页面时,都会出现类似框。如果我单击任何链接,则会加载下一页并且不会显示“赞”框。

我已经试过了,但没有奏效=/

http://reed.github.io/turbolinks-compatibility/facebook.html

关于如何解决这个问题的任何想法?

4

2 回答 2

4

您在原始问题中发布的链接非常好。它要求我们创建三个函数:

1) saveFacebookRoot:这是必需的,以便div#fb-root以后可以恢复。这是呼吁page:fetchpage:fetch在 DoM 仍然属于旧页面时调用。即:新页面没有替换旧页面

2)restoreFacebookRoot:这是div#fb-root可以将其附加回页面所必需的。它被调用page:changepage:change当新的 DoM 可用时调用。

3)那里有轻微的错字。我们需要调用它page:load

FB.XFBML.parse() // Correct

代替 :

FB?.XFBML.parse() // InCorrect

请记住,当页面第一次重新加载时,只有page:change这三个被调用。

这里的技巧是使用全局变量fb_rootfb_events_bound. 这些必须在所有其他页面中都可以访问,但这就是我们首先讨厌 turbolinks 的原因。

参考资料:http ://reed.github.io/turbolinks-compatibility/facebook.html

于 2013-08-07T20:12:25.553 回答
0

安装observejs:

gem 'observejs'

然后将标签添加到小部件:

<div as="FB" class="fb-comments" data-href="<%= request.original_url %>"></div>

然后在 javascripts 文件夹中创建一个新脚本(在我的示例中为 fb.coffee):

ObserveJS.bind 'FB', class
  root: document.createElement('div')
  @::root.id = 'fb-root'

  loaded: =>
    if !document.body.contains(@root)
      document.body.appendChild(@root)

    if FB?
      FB.XFBML.parse()
    else
      @initialize()

  initialize: =>
    js = document.createElement('script')

    script = document.getElementsByTagName('script')[0]
    js = document.createElement('script')
    js.id = 'facebook-jssdk'
    js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=YOUR_APP_ID&version=VERSION_OF_API"
    script.parentNode.insertBefore(js, script)

在 application.js 中包含 js 文件

//= require observejs
//= require fb
于 2016-07-18T07:31:40.093 回答