Ruby on rails Facebook和Twitter小部件在导航(Rails)上消失
我有一个类似fb的Ruby on rails Facebook和Twitter小部件在导航(Rails)上消失,ruby-on-rails,twitter,facebook-likebox,turbolinks,Ruby On Rails,Twitter,Facebook Likebox,Turbolinks,我有一个类似fb的框和一个推特时间线、facebook官方页面和推特小部件。然而,在实际的导航中(侧边栏中的链接进行ajax加载),例如在单击徽标时,这两个小部件消失在空气中 刷新页面时,小部件再次按预期显示 <div id="social_bar"> <div id="facebook_like_box"> <div class="fb-like-box" data-href="https://www.facebook.com/Gx.Edg
框
和一个推特时间线
、facebook官方页面和推特小部件。然而,在实际的导航中(侧边栏中的链接进行ajax加载),例如在单击徽标时,这两个小部件消失在空气中
刷新页面时,小部件再次按预期显示
<div id="social_bar">
<div id="facebook_like_box">
<div class="fb-like-box" data-href="https://www.facebook.com/Gx.Edg" data-width="234" data-height="500" data-colorscheme="light" data-show-faces="true" data-header="true" data-stream="false" data-show-border="true"></div>
</div>
<a class="twitter-timeline" href="https://twitter.com/gxEDGE" data-widget-id="308092518074040321"></a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
</div>
!函数(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http://.test(d.location)''http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+“://platform.twitter.com/widgets.js”;fjs.parentNode.insertBefore(js,fjs);}(文档,“脚本”,“twitter wjs”);
问题在于默认情况下捆绑的ruby gem,称为TurboLink
该解决方案可在TurboLink兼容性项目中找到:
page:
的所有事件绑定更改为turbolinks:
。Turbolinks 5中的。这是使@reed的Twitter咖啡脚本(解决方案2)生效所需的唯一更改。至于Facebook的coffeescript,没有所谓的turbolinks:fetch
或turbolinks:change
事件,但这没关系。请继续阅读,以获得更优雅的解决方案
里德的Facebook咖啡脚本使用Javascript将#fb root
元素从旧页面主体转移到新页面。据我所知,这样做是为了保留Facebook的功能。Turbolinks 5有一个新功能,允许您将页面元素标记为。User@pomartel提到了这一点,我相信这是一个更加优雅的解决方案。只需将data turbolinks permanent
属性添加到#fb root
div,我们就不需要使用saveFacebookRoot
和restoreFacebookRoot
函数
下面是完整的Facebook解决方案。在
中:
别忘了将Facebook和Twitter咖啡脚本添加到页面中
<body>
<div id="fb-root" data-turbolinks-permanent></div>
<%= javascript_include_tag 'facebook_sdk', 'data-turbolinks-track': 'reload' %>
$ ->
loadFacebookSDK()
bindFacebookEvents() unless window.fbEventsBound
bindFacebookEvents = ->
$(document)
.on('turbolinks:load', ->
FB?.XFBML.parse()
)
@fbEventsBound = true
loadFacebookSDK = ->
window.fbAsyncInit = initializeFacebookSDK
$.getScript("//connect.facebook.net/en_US/sdk.js")
initializeFacebookSDK = ->
FB.init
appId : 'YOUR-APP-ID-HERE'
status : true
cookie : true
xfbml : true
autoLogAppEvents : true
version: 'v2.11'