我在启用Turbolinks的情况下将Facebook社交插件(特别是评论)添加到我的Rails 4应用程序时遇到了问题。我按照turbolinks issue #62上的示例进行操作,但无法使其正常工作。
我也试过了turbolink的解决方案here,但无法让它工作。
根据this answer修复turbolinks页面上的明显拼写错误也不起作用。
SDK未加载,控制台中没有错误。
代码:
### view:
<div id="fb-root"></div>
<div class="fb-comments" data-href="<%= request.original_url %>"></div>
### coffeescript:
fb_root = null
fb_events_bound = false
$ ->
loadFacebookSDK()
bindFacebookEvents() unless fb_events_bound
bindFacebookEvents = ->
$(document)
.on('page:fetch', saveFacebookRoot)
.on('page:change', restoreFacebookRoot)
.on('page:load', ->
FB.XFBML.parse()
)
fb_events_bound = true
saveFacebookRoot = ->
fb_root = $('#fb-root').detach()
restoreFacebookRoot = ->
if $('#fb-root').length > 0
$('#fb-root').replaceWith fb_root
else
$('body').append fb_root
loadFacebookSDK = ->
window.fbAsyncInit = initializeFacebookSDK
$.getScript("//connect.facebook.net/en_US/all.js#xfbml=1")
initializeFacebookSDK = ->
FB.init
appId : 'xxxxxxxxxxxx'
channelUrl: '//www.mydomain.com/channel.html'
status : true
cookie : true
xfbml : true
### /public/channel.html
<script src="//connect.facebook.net/en_US/all.js"></script>
-
感谢。真的很感激帮助。
答案 0 :(得分:0)
试试这个并告诉我它是否有效......
在social.js.coffee
文件夹中创建assets/javascripts
。
写在:
$(document).on 'page:change', ->
FB.init({ status: true, cookie: true, xfbml: true });
答案 1 :(得分: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