iOS 6上的FB.login()不会将控制权返回给具有异步执行的脚本

时间:2013-01-18 19:58:08

标签: mobile login ios6 facebook-javascript-sdk

我已经创建了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上都可以正常工作。

0 个答案:

没有答案