我添加的我的Facebook javascript使用"喜欢"来自facebook和其他组件的按钮,如下所示:
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '164355773607006', // App ID
channelURL : '//WWW.KOOLBUSINESS.COM/static/channel.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
oauth : true, // enable OAuth 2.0
xfbml : true // parse XFBML
});
// Additional initialization code here
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
{% ifequal host "www.montao.com.br" %}
js.src = "//connect.facebook.net/pt_BR/all.js";
{% else %}
js.src = "//connect.facebook.net/en_US/all.js";
{% endifequal %}
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
我可以将它放在页面底部而不是顶部,因为这会加快页面加载速度吗?
如何检查频道文件是否正常工作?
我的频道文件可以在其他域上,但它是相同的应用程序(我的应用程序提供多个域名)吗?
我的服务器是否有另一种方式来访问会话而不是使用cookie?
在葡萄牙语和英语之间切换比我更好吗?我的方式有效,但也许是低劣的。更好的方法是查找语言的HTTP ACCEPT_LANGUAGE或cookie或http get参数。在这种情况下,一个域应该是葡萄牙语,但是当用django_language_cookie切换我的应用程序的语言时,切换FB组件上的语言会很好。所以我想我可以用javascript阅读django_language_cookie而不是检查域名,但是我必须学习如何去做。
您能评论或帮助我解决方案吗?
谢谢
答案 0 :(得分:1)
您的频道文件必须位于同一个域中,请求文档才能提供。 那么,当您在浏览器中请求URL并获取内容时,您可以检查它是否正常工作;)
我以下列方式为我的项目切换JS-SDK的语言: 使用签名请求,会有一个“locale”变量传递给您的服务器。 您可以通过解码SR并访问$ sr ['user'] ['locale']来获取它(或将解码后的SR传递给模板引擎并通过{{SR.user.locale}}访问它 - 这映射到字符串格式为“en_US”或用户在Facebook上设置的任何语言。 将JS-SDK嵌入正确的本地化非常简单,然后:
//connect.facebook.net/{{SR.user.locale}}/all.js
好吧,如果你只想保留Protugese / English开关,因为当你的应用只是PT / EN时,例如德语对话框会很奇怪,那么请将其包含如下:
//connect.facebook.net/{% if SR.user.locale == "pt_BR" %}pt_BR{% else %}en_US{% endif %}/all.js
但是我会坚持使用第一个解决方案,因为SDK打开的对话框会被用户体验为facebook的一部分 - 而且他们会用他们设置facebook的语言来解释它。
希望这对你有所帮助! (如果您的应用有多个页面,请记住缓存此区域设置,因为您只在第一次请求时获得RT;)
答案 1 :(得分:1)
区域设置解决方案应该可以正常工作。但要注意FB不支持阳光下的每个场所。您可以在此处找到他们支持的区域设置:
https://www.facebook.com/translations/FacebookLocales.xml
他们没有广泛记录这一点。如果您的用户区域设置不在列出的区域中,则该用户将在该js请求上获得404,并且结果是已损坏或不存在的FB按钮。
我要补充的第二点是在channelURL附近。如果你正在使用它(对你的网站性能和IE用户来说是灾难性的,如果你没有),那么你现在有第二个地方你可能需要设置这个区域设置:在那个channel.html里面的js包含。他们没有在任何地方提到这一点,但我会犹豫是否开始混合和匹配不同版本的js文件(en_US)用于反向通道通信,其中来自主页面(js.src)的初始调用是其他一些语言环境。 / p> 祝你好运!