我正在尝试通过 facebook 的 javascript SDK 异步加载一些帖子。我正在页面底部加载 javascript 文件:
<html>
<head>.....</head>
<body>
.....
.....
.....
<div id="fb-root"></div>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript" src="/res/jquery.stp.js" charset="utf-8"></script>
</body></html>
在 jquery.stp.js 中,我按以下顺序加载这些东西: - javascript sdk - 一些 jquery-things - 函数 loadFBPosts() - fb.init()
文件:
var isLoaded = false;
(function(d, debug){
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" + (debug ? "/debug" : "") + ".js";
ref.parentNode.insertBefore(js, ref);
}(document, /*debug*/ false));
$(function(){
//some jquery event things
})
function loadFBPosts(fbPageId) {
// Facebook call
if(isLoaded) {
//do some things with the FB.api()
//and catch errors...
}else{
//api not loaded...
}
}
window.fbAsyncInit = function() {
// init the FB JS SDK
FB.init({
appId : 'xxxxx',
channelUrl : '//lab.example.com/channel.php',
status : true,
cookie : true,
xfbml : true
});
isLoaded = true;
laadFBPosts(); // here after FB.init is initialized call the function.
};
问题
现在奇怪的事情发生了。如果我运行此页面,则会弹出一个错误:“请求此资源需要访问令牌”,错误代码为 104。但是,如果我单击页面上的链接,<a href='javascript:loadFBPosts()'>click</a>
则该函数将按应有的方式执行。
这怎么可能?我尝试使用 FB.api() 获取的资源来自公共 Facebook 页面。例如 FB.api('/218818688131271/posts?limit=5') 所以我不需要访问令牌。正确的?
如果我确实需要一个访问令牌:如果我不想用登录屏幕打扰每个访问者,我如何获得一个;因为它只是显示公共信息....
我唯一想做的就是显示我页面上的最后 5 个帖子和即将发生的事件。