この問題について問い合わせるために Facebook バグ ID 517124631665353 を作成しましたが、これが Facebook の JS SDK のバグなのか、iOS 6 に付属するモバイル Safari の最新バージョンのバグなのかはわかりません。 iOS6.
次の 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 で期待どおりに機能します。