我在Facebook上创建了一个请求对话框,它在Firefox和Chrome中运行良好,但在IE8中,它给出了错误:FB is undefined
。请在下面找到我使用的代码。
<html xmlns=="http://www.w3.org/1999/xhtml"
xmlns:fb="https://www.facebook.com/2008/fbml">
<head>
<title>Request Tester C</title>
</head>
<body>
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<p>
</p>
<script>
FB.init({
appId : 'XXXXXXXXXXXXXXXXXXXXX',
status : true,
cookie : true,
oauth: true
});
function sendRequestViaMultiFriendSelector() {
FB.ui({method: 'apprequests',
message: 'My Great Request'
}, requestCallback);
}
function requestCallback(response) {
// Handle callback here
window.location.href = "test.php";
}
sendRequestViaMultiFriendSelector();
</script>
</body>
</html>
答案 0 :(得分:1)
您的问题是,在您尝试使用Facebook功能时,Facebook功能尚未完成加载。根据Facebook:
在调用FB.init()之后,几乎所有Facebook Connect的JS API都是异步加载的。由于异步性质,在进行这些调用后,JS API不一定立即可用。您应该使用FB.ensureInit或FB.Bootstrap.requireFeatures来确保在使用它们之前加载JS API。
我们有一个wiki文档,可以更详细地描述这一点。但是,我们刚刚发现一些Connect应用程序在调用FB.init后立即调用了Connect JS API,如FB.Connect。*和FB.Facebook。*。这种方法会导致间歇性故障,因为这些功能可能尚未加载。
他们的文档非常好(不是100%完整),对您有用。现在,它应该足以包装你的代码:
function sendRequestViaMultiFriendSelector() {
FB.ui({method: 'apprequests',
message: 'My Great Request'
}, requestCallback);
}
function requestCallback(response) {
// Handle callback here
window.location.href = "test.php";
}
FB_RequireFeatures(["Connect"], function() {
FB.init({
appId : 'XXXXXXXXXXXXXXXXXXXXX',
status : true,
cookie : true,
oauth: true
});
sendRequestViaMultiFriendSelector();
});
答案 1 :(得分:0)
我在使用ie8时特别面对同样的问题。
通过NOT HTTP://connect.facebook.net/en_US/all.js
可以实现快速修复
而是使用HTTPS://connect.facebook.net/en_US/all.js
出于某种原因,SSL解决了这个问题。