我已经创建了Facebook Bug ID 517124631665353来询问这个问题,但我不确定这是Facebook的JS SDK或iOS 6附带的最新版移动Safari的错误。这只发生在iPhone上和运行iOS 6的iPad。
尝试以下每个FB Rell示例:
普通警报(): http://www.fbrell.com/saved/5224cbd2585cdcd4faefd2de236e577c
<button id="fb-login">Login & Permissions</button>
<script>
document.getElementById('fb-login').onclick = function() {
var cb = function(response) {
Log.info('FB.login callback', response);
if (response.status === 'connected') {
Log.info('User logged in');
} else {
Log.info('User is logged out');
}
alert('This fires on Mobile Safari, iOS 6.');
};
FB.login(cb, { scope: 'publish_actions' });
};
</script>
setTimeout()中的alert(): http://www.fbrell.com/saved/9fee23e8553878748f8a3b840e8f0cb5
<button id="fb-login">Login & Permissions</button>
<script>
document.getElementById('fb-login').onclick = function() {
var cb = function(response) {
Log.info('FB.login callback', response);
if (response.status === 'connected') {
Log.info('User logged in');
} else {
Log.info('User is logged out');
}
setTimeout(function () {alert('This never fires on Mobile Safari, iOS 6.')}, 0);
};
FB.login(cb, { scope: 'publish_actions' });
};
</script>
在运行iOS 6的iPad和iPhone上,setTimeout()中的alert()不会触发。在iPad上,弹出窗口似乎在所有情况下都会关闭,但在iPhone中,弹出窗口不会关闭,只有用户才会返回到原始页面。
我们最初在www.expertflyer.com/mobile上看到了这个问题,我们在Facebook登录完成后发送了一个AJAX请求。我们发现从不执行AJAX请求返回时应该执行的代码。这更简单地使用FB Rell示例中的setTimeout()调用显示,但通用性是在Facebook登录返回后不执行异步代码。这在以前是有效的,我们没有对我们的代码进行任何更改,这在早期版本的iOS和Android上都可以正常工作。