Javascript Parse.com Facebook API logIn()方法。回调永远不会被调用
当我的click handler在客户机上调用logIn()函数时,我看到一个FB弹出窗口和一条记录正在用户集合中创建,但从未调用回调方法。相反,我在JS控制台中看到了以下内容Javascript Parse.com Facebook API logIn()方法。回调永远不会被调用,javascript,facebook,parse-platform,facebook-apps,facebook-authentication,Javascript,Facebook,Parse Platform,Facebook Apps,Facebook Authentication,当我的click handler在客户机上调用logIn()函数时,我看到一个FB弹出窗口和一条记录正在用户集合中创建,但从未调用回调方法。相反,我在JS控制台中看到了以下内容 Uncaught TypeError: Cannot read property 'getTime' of null parse-1.2.18.min.js:3 这是我页面上的代码 设置FBAPI <script> window.fbAsyncInit = function() { P
Uncaught TypeError: Cannot read property 'getTime' of null parse-1.2.18.min.js:3
这是我页面上的代码
设置FBAPI
<script>
window.fbAsyncInit = function() {
Parse.FacebookUtils.init({
appId : 757503280935086,
xfbml : true,
version : 'v2.0'
});
};
(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";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
FB应用程序已启用网站“平台”
下次我试的时候我看到了
Uncaught Error: Setting authResponse is not supported
在JS控制台中。注意:由于Facebook修复了API调用以旧字符串格式返回日期,因此不再需要此修复程序(实际上会破坏它)。 Facebook最近添加了2.0版的API,不幸的是他们破坏了解析。特别是Parse使用了一个非常严格的规则来读取Facebook回复中的日期 解决方法是下载parse-1.2.18.js文件,并更新parse.\u parseDate函数,然后将该js文件加载到您的站点中,并更改页面以使用该文件而不是当前版本:
Parse._parseDate = function(iso8601) {
var regexp = new RegExp(
"^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2})" + "T" +
"([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})" +
"(.([0-9]+))?" + "Z$");
将其更新为:
Parse._parseDate = function(iso8601) {
var iso8601 = iso8601.split(“+”)[0] + “Z”;
var regexp = new RegExp(
"^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2})" + "T" +
"([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})" +
"(.([0-9]+))?" + "Z$");
基本上,它只是从末尾去掉任何“+00:00”,再加上“Z”,这样它就可以再次工作了
您可以使用以下方法使其更加健壮(以防Facebook恢复到旧的日期格式):
var iso8601 = iso8601.split(“+”)[0].split(“Z”)[0] + “Z”;
那样的话,如果“Z”被放回去,我们会在它之前抓住所有的东西,不要打破
Facebook bug追踪器中记录了一个bug,它还显示了一个更新的regexp
,这两个工具都可以使用,不过我手头没有这个链接
更新:还要确保您使用的是正确版本的API
如果您现在按照Facebook上的说明进行操作,他们希望您有这样一个部分:
(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";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
window.fbAsyncInit = function() {
Parse.FacebookUtils.init({
appId : yourAppId,
xfbml : true,
version : 'v1.0'
});
};
请注意,如果您使用的是sdk.js
,则需要向init调用传递一个version参数,对于Parse,该参数将如下所示:
(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";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
window.fbAsyncInit = function() {
Parse.FacebookUtils.init({
appId : yourAppId,
xfbml : true,
version : 'v1.0'
});
};
我们将显式地将版本设置为1.0,直到Parse更新其代码以处理2.0。问题来自于使用v2 facebook api 切换到旧版本与蒂莫西的修复工程
window.fbAsyncInit = function() {
Parse.FacebookUtils.init({
appId : '' // Facebook App ID
});
};
(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/all.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
请注意,包括all.js而不是sdk.js我明白了,我有这个问题是为了感谢Timothy和Peeter,你救了我的命!即使添加了此修复程序,我现在也会出现未捕获错误:登录时不支持设置authResponseproblem@Peeter谢谢,还添加了关于设置版本的说明。@TimothyChanges我认为设置版本没有帮助,至少对我来说没有帮助。