在原生ios6UIWebView中登录Facebook Javascript(在SAFARI上工作)
Facebook Javascript login in native ios6 UIWebView (WORKS ON SAFARI)
我正在寻找一个关于在带有UIWebView的本机iOS 6应用程序上运行FB.login()的解决方案。我已经调试了很多,但还没有找到解决方案。
问题是:当一个调用fb.login时,我的应用程序会打开一个新的UIWebView来处理它(就像safari打开了一个新选项卡一样)。Facebook登录出现,但当它登录时,会出现一个空白页面,什么都没有发生(在根UIWebView中也没有)。。。有人知道完成fb.login-js流的解决方案吗?
谢谢大家!
PS:没有帮助的链接--
如何让UIWebView在iOS 5和iOS 6上打开Facebook登录页面以响应OAuth请求?
https://stackoverflow.com/questions/13387272/fb-login-issue-with-ios-6
成功了!
这有点像黑客,但js-facebook-sdk在iOS 6的UiWebView上的登录终于奏效了。
如何做到这一点?它是一个纯粹的JS+Facebook JS SDK+UIWebView Delegate处理功能的解决方案。
JS-第一步)
登录按钮(用于连接facebook)调用此函数示例,它将触发FaceJS登录/oauth对话框:
function loginWithFacebookClick(){
FB.login(function(response){
//normal browsers callback
});
}
JS-第二步)
每次用户加载网页时(在FB.int()之后)添加authResponseChange侦听器,以捕获用户的连接状态:
FB.Event.subscribe('auth.authResponse.Change', function(response){
//UIWebView login 'callback' handler
var auth = response.authResponse;
if(auth.status == 'connected'){
//user is connected with facebook! just log him at your webapp
}
});
通过应用程序的UIWebView代理功能,您可以处理facebook oauth响应
目标C-第三步)
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *url = [[request URL] absoluteString];
//when user status == connected (has a access_token at facebook oauth response)
if([url hasPrefix:@"https://m.facebook.com/dialog/oauth"] && [url rangeOfString:@"access_token="].location != NSNotFound)
{
[self backToLastPage];
return NO;
}
return YES;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *url = [[webView.request URL] absoluteString];
if([url hasPrefix:@"https://m.facebook.com/dialog/oauth"])
{
NSString *bodyHTML = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
//Facebook oauth response dead end: is a blank body and a head with a script that does
//nothing. But if you got back to your last page, the handler of authResponseChange
//will catch a connected status if user did his login and auth app
if([bodyHTML isEqualToString:@""])
{
[self backToLastPage];
}
}
}
因此,当"重定向"用户到最后加载的页面时,第二步是在facebook登录对话框中处理用户操作。
如果我回答得太快,请问我!希望能有所帮助。
- jQuery Datepicker可以在Safari中工作,但不能在FF或Chrome中工作
- 为什么我的JavaScript在Safari上的严格模式下不能正常工作
- jQuery$.post可以在chrome、safari中工作,但不能在FF中工作(声明成功回调函数未定义)
- 异步加载的SVG过滤器feColorMatrix在Chrome中工作,而不是在Safari或Firefox中
- RGB 到 HEX JavaScript 函数在 Chrome 中工作,但不能在 Firefox 或 Safari 中工
- setInterval 或 window.location 在 Opera、IE 和 Safari 中无法正常工作
- window.onbeforeunload在IE8中不触发(在Firefox,Chrome和Safari中工作正常)
- toLocaleString()不会'无法在Safari浏览器中工作
- 动画HTML5横幅工作在除Safari以外的一切
- Date.prototype.get日期;不能在Safari中工作
- jQuery UI手风琴无法在本地目录的Safari中工作
- html+css+js组合在Google Chrome或Safari浏览器中无法正常工作
- window.open()没有'无法在添加到主屏幕的移动Safari web应用程序中工作
- webkitAudioContext在iOS Safari上创建MediaElementSource不工作
- JQuery图像大小计算没有'不能在Chrome/Safari中工作
- JavaScript倒计时;不能在Safari中工作
- style.display无法在Chrome、Safari-Firefox、IE11中正常工作
- 为什么这个html5音频不能在chrome上工作,但在safari上工作得很好
- 复选框事件处理程序抛出错误的点击事件在chrome浏览器,safari工作良好的键盘事件
- document.referrer不在safari工作