Javascript 如何修复Facebook JSDK有时加载两次、一次或根本不加载的问题?

Javascript 如何修复Facebook JSDK有时加载两次、一次或根本不加载的问题?,javascript,facebook,facebook-javascript-sdk,Javascript,Facebook,Facebook Javascript Sdk,我在网站上使用facebook javaSDK,我有一个奇怪的问题。 当我用“internet explorer”加载网站时,它总是运行良好。 当我使用firefox加载网站时,它总是加载两次,当我使用chrome时,JSDK有时加载一次,有时根本不加载,这给了我一个错误“未捕获引用错误:未定义FB”。 我尝试对SDK使用异步加载,但仍然存在相同的问题。 顺便说一句,firefox上有firebug,这可能是JSDK加载两次的原因吗 这是加载jssdk的代码 <div id="fb-roo

我在网站上使用facebook javaSDK,我有一个奇怪的问题。 当我用“internet explorer”加载网站时,它总是运行良好。 当我使用firefox加载网站时,它总是加载两次,当我使用chrome时,JSDK有时加载一次,有时根本不加载,这给了我一个错误“未捕获引用错误:未定义FB”。 我尝试对SDK使用异步加载,但仍然存在相同的问题。 顺便说一句,firefox上有firebug,这可能是JSDK加载两次的原因吗

这是加载jssdk的代码

<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
  appId      : '108437552626598', // App ID
  status     : true, // check login status
  cookie     : true, // enable cookies to allow the server to access the session
  xfbml      : true  // parse XFBML
});


};

 // Load the SDK Asynchronously
 (function(d){
 var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
 if (d.getElementById(id)) {return;}
 js = d.createElement('script'); js.id = id; js.async = true;
 js.src = "//connect.facebook.net/en_US/all.js";
 ref.parentNode.insertBefore(js, ref);
  }(document));
</script>

window.fbAsyninit=函数(){
FB.init({
appId:'108437552626598',//应用ID
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:true//解析xfbml
});
};
//异步加载SDK
(职能(d){
var js,id='facebook jssdk',ref=d.getElementsByTagName('script')[0];
if(d.getElementById(id)){return;}
js=d.createElement('script');js.id=id;js.async=true;
js.src=“//connect.facebook.net/en_US/all.js”;
ref.parentNode.insertBefore(js,ref);
}(文件);
我试图使用FB.getlogin,我试图在Wordpress网站上整合facebook opengraph。在我加载完主要内容之后,我就把我的脚本写出来了 这是密码

             </div><!-- end #content -->


<script type="text/javascript"      src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
 <script type="text/javascript">
 FB.getLoginStatus(function(response) {
 if (response.status == 'connected') {
alert('in');
window.facebooklogin = 'true';
    window.myValue = response.authResponse.accessToken;  
window.myId = response.authResponse.userID;
$('.userimage img').attr('src','http://graph.facebook.com/' + window.myId +         '/picture');
 $.ajax({ url: 'http://ballvids.com/check/admin_checkuser.php',
     data: {action: window.myId},
 dataType:'json',
     type: 'post',
     success: function(output) {
    if (output.message == 'true'){
        $('.thumbnail   img').attr('src',"http://ballvids.com/images/on2.png");
        alert(window.myValue);
        FB.api('/me/video.watches?video=<?php echo   urlencode(get_permalink($post->ID));?>&access_token='+window.myValue,'post',function(response) {
             if (!response || response.error) {
            alert(response.error.message);
            } else {
            alert(response.id);
            postID=response.id;
            showStuff('removeTimeline');
            }  
                });
    }else{

        $('.thumbnail img').attr('src',"http://ballvids.com/images/off2.png");
    }

        }
});
}else{
    alert('inside2');
    $('.thumbnail img').attr('src',"http://ballvids.com/images/off2.png");
    window.facebooklogin = 'false';
}

FB.getLoginStatus(函数(响应){
如果(response.status==“已连接”){
警惕(‘in’);
window.facebooklogin='true';
window.myValue=response.authResponse.accessToken;
window.myId=response.authResponse.userID;
$('.userimage img').attr('src','http://graph.facebook.com/“+window.myId+/picture”);
$.ajax({url:'http://ballvids.com/check/admin_checkuser.php',
数据:{action:window.myId},
数据类型:'json',
键入:“post”,
成功:功能(输出){
如果(output.message==“true”){
$('.thumbnail img').attr('src',”http://ballvids.com/images/on2.png");
警报(window.myValue);
api('/me/video.watches?video=&access_-token='+window.myValue,'post',函数(响应){
如果(!response | | response.error){
警报(响应、错误、消息);
}否则{
警报(response.id);
postID=response.id;
showStuff(“移除时间线”);
}  
});
}否则{
$('.thumbnail img').attr('src',”http://ballvids.com/images/off2.png");
}
}
});
}否则{
警惕(“内部2”);
$('.thumbnail img').attr('src',”http://ballvids.com/images/off2.png");
window.facebooklogin='false';
}
},对);


谢谢

您必须调用
fbAsyninit中的
FBLoginStatus()

window.fbAsyncInit = function() {
    FB.init({
        appId  : APP_ID,
        status : true,
        cookie : true,
        xfbml  : true
    });

    FB.getLoginStatus( function(response) {
        console.log(response);
    }, true);
};
如果从
FB.getLoginStatus()
返回的缓存对象有问题,则必须传递第二个参数
true

文件:

当我用firefox加载网站时,它总是加载两次

尝试设置channel.html文件并在初始化时引用它

当我使用chrome时,JSDK有时加载一次,有时根本不加载,给我一个错误“uncaughtreferenceerror:FB未定义”


如果将对FB方法的调用包装到window.fbAsyninit中,这是不可能的,因为如果未加载SDK,将永远不会调用该回调。结论:您没有,但是您将您的FB.getLoginStatus调用放在了其他地方(您的代码中还没有向我们显示该调用)。

您是否有任何显示问题的示例代码?添加了示例代码,当我尝试使用FB.getLoginStatus时出现了问题谢谢!。我的代码实际上是以fb.getlogin位于不同页面的方式构建的,但我会尝试将它们统一起来。你知道为什么它会在firefox上加载两次吗?@user1108310你需要添加一个频道。谢谢!我会更新fb.getlogin代码,但我不认为这是问题的根源,因为它总是在InternetExplorer上运行。有缺陷的脚本逻辑不会正确,因为它可能在某些特定浏览器中工作……添加了fb.getlogin脚本,请查看您是否能找到我代码中的错误\: