abi*_*iku 50 javascript facebook-javascript-sdk
我正在使用Facebook JS sdk,我今天创建了一个新的应用程序.一切都配置正确.使用init函数,如:
window.fbAsyncInit = function() {
FB.init({
appId : 'xxxx', // App ID
status : false,
version: 'v2.0',
cookie : true,
xfbml : false // parse XFBML
});
};
(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/pl_PL/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
Run Code Online (Sandbox Code Playgroud)
但我有一个错误:"未捕获错误:init没有调用有效版本"正在尝试其他版本,如:2.1,2.2仍然没有运气.我在这做错了什么?
Mat*_*ner 33
**免责声明 - 这纯粹是猜测.似乎已经解决了我的问题.
我在最近的一个项目中遇到过这个问题.我认为这是一个延迟问题.Facebook SDK要求<div id="fb-root"></div>在页面上.这应该是打开body标签后的第一件事.在此之后,您可能会看到您的初始化代码.
对我来说,这个问题并不一致.我偶尔会看到这个bug,有时我也不会.因此,我的结论是延迟问题.如果SDK找不到fb-root,那么必须创建一个.在这里,我认为存在延迟问题.
尝试在打开身体标签之后添加它,但在你的身体之前添加FB.init({});.
<div id="fb-root"></div>
Run Code Online (Sandbox Code Playgroud)
这似乎已经解决了我的问题,并希望也能帮助其他人.在V1.0文档讨论的原因fb-root,但V2.0文档没有提及该项目时,可能是因为在init脚本将其添加为你,如果它没有找到它.
n_y*_*n_y 26
我通过使用all.js而不是sdk.js来实现它.
在您的情况下,它看起来像:
js.src = "//connect.facebook.net/pl_PL/all.js";
Run Code Online (Sandbox Code Playgroud)
代替
js.src = "//connect.facebook.net/pl_PL/sdk.js";
Run Code Online (Sandbox Code Playgroud)
Myt*_*ish 11
添加&version=v2.0到js.src,如下所示:
(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.0";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
Run Code Online (Sandbox Code Playgroud)
这个问题困扰了我一段时间.我尝试了这里列出的许多想法,例如更改版本号和移动/删除fb-root.
最终对我window.fbAsyncInit有用的是删除整个函数并init在哈希中指定属性sdk.js.例如:
<script type="text/javascript">
(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 = "https://connect.facebook.net/en_US/sdk.js#version=v2.2&appId=12345&status=true&cookie=true&xfbml=true";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
Run Code Online (Sandbox Code Playgroud)
当然,您可以省略参数以使用其默认值.
我无法在任何地方找到这种方法,因此使用它需要您自担风险.幸运的是,我正在升级旧网站v1.x,v2.x并在加载时使用了这种技术all.js.
我取代了这个
js.src = "//connect.facebook.net/en_US/sdk.js";
Run Code Online (Sandbox Code Playgroud)
有了这个
js.src = "//connect.facebook.net/en_US/all.js";
Run Code Online (Sandbox Code Playgroud)
并且工作:)