我创建了 Facebook 错误 ID 517124631665353 来询问这个问题,但我不确定这是 Facebook 的 JS SDK 还是 iOS 6 附带的最新版本的移动 Safari 的错误。这只发生在运行的 iPhone 和 iPad 上iOS 6。
尝试以下每个 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 上按预期工作。