Rails Turbolinks中的Facebook插件页面无法加载

在我的Rails应用程序中,我正在加载Facebook插件页面,但由于turbolinks它不会加载每个页面(仅有时)。 我在这个页面上尝试过这个脚本 ,但现在它从未加载过。 我做了什么?

我用这个脚本创建了facebook.coffee:

$ -> loadFacebookSDK() bindFacebookEvents() unless window.fbEventsBound bindFacebookEvents = -> $(document) .on('page:fetch', saveFacebookRoot) .on('page:change', restoreFacebookRoot) .on('page:load', -> FB?.XFBML.parse() ) @fbEventsBound = true saveFacebookRoot = -> if $('#fb-root').length @fbRoot = $('#fb-root').detach() restoreFacebookRoot = -> if @fbRoot? if $('#fb-root').length $('#fb-root').replaceWith @fbRoot else $('body').append @fbRoot loadFacebookSDK = -> window.fbAsyncInit = initializeFacebookSDK $.getScript("//connect.facebook.net/cs_CZ/sdk.js#xfbml=1&version=v2.6") initializeFacebookSDK = -> FB.init appId : 'YOUR_APP_ID' status : true cookie : true xfbml : true 

然后在我的application.js中我只需要它。

在视图中我有这个代码:

 

Facebook插件页面未加载。 你不知道为什么吗? 我正在寻找appId,但在插件页面中它不包括在内。

这对我有用… Facebook的文档和你链接的页面上的脚本之间的某种组合

 $ -> loadFacebookSDK() bindFacebookEvents() unless window.fbEventsBound bindFacebookEvents = -> $(document) .on('page:fetch', saveFacebookRoot) .on('page:change', restoreFacebookRoot) .on('page:load', -> FB.XFBML.parse() ) @fbEventsBound = true saveFacebookRoot = -> if $('#fb-root').length @fbRoot = $('#fb-root').detach() restoreFacebookRoot = -> if @fbRoot? if $('#fb-root').length $('#fb-root').replaceWith @fbRoot else $('body').append @fbRoot loadFacebookSDK = -> ((d, s, id) -> js = d.getElementsByTagName(s)[0] fjs = d.getElementsByTagName(s)[0] return if d.getElementById(id) js = d.createElement(s) js.id = id js.src = "https://connect.facebook.net/es_LA/sdk.js#xfbml=1&version=v2.5" fjs.parentNode.insertBefore(js, fjs) )(document, 'script', 'facebook-jssdk') initializeFacebookSDK = -> FB.init # appId : 'YOUR_APP_ID' status : true cookie : true xfbml : true 

不同之处在于loadFacebookSDKfunction。 请注意,正如我在问题中所评论的那样,$ .getScript()删除了请求的查询/参数部分。

对于发现这个问题的其他人,我找到了这个问题,解决了这个问题: https : //gist.github.com/6temes/52648dc6b3adbbf05da3942794b97a00

 // FacebookSDK // https://developers.facebook.com/docs/plugins/page-plugin/ (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 = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.8"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); // Replace 'facebook-jssdk' with your page id. // Compatibility with Turbolinks 5 (function($) { var fbRoot; function saveFacebookRoot() { if ($('#fb-root').length) { fbRoot = $('#fb-root').detach(); } }; function restoreFacebookRoot() { if (fbRoot != null) { if ($('#fb-root').length) { $('#fb-root').replaceWith(fbRoot); } else { $('body').append(fbRoot); } } if (typeof FB !== "undefined" && FB !== null) { // Instance of FacebookSDK FB.XFBML.parse(); } }; document.addEventListener('turbolinks:request-start', saveFacebookRoot) document.addEventListener('turbolinks:load', restoreFacebookRoot) }(jQuery));