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

元の質問に投稿したリンクはとてもいいです。3 つの関数を作成するよう求められます。

1) saveFacebookRoot: これはdiv#fb-root後で復元できるようにするために必要です。これは呼び出されますpage:fetchpage:fetchDoMがまだ古いページである間に呼び出されます。つまり、新しいページは古いページを置き換えていません

2) restoreFacebookRoot: これはdiv#fb-root、ページに追加できるようにするために必要です。で呼び出されpage:changeます。page:change新しい DoM が利用可能になると呼び出されます。

3) そこに小さなタイプミスがあります。これを呼び出す必要がありますpage:load

FB.XFBML.parse() // Correct

それ以外の :

FB?.XFBML.parse() // InCorrect

ページが最初にリロードさpage:changeれると、これら 3 つのうち だけが呼び出されることに注意してください。

ここでのコツは、グローバル変数fb_rootfb_events_bound. これらは他のすべてのページでアクセスできる必要がありますが、これがそもそもターボリンクを嫌う理由です.

参考文献: 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)

js ファイルを application.js に含めます。

//= require observejs
//= require fb
于 2016-07-18T07:31:40.093 に答える