Facebook iOS登录流程完成后,将JS脚本注入UIWebView

时间:2012-11-16 10:11:43

标签: ios uiwebview facebook-login

有时当我在Facebook iOS登录流程完成后尝试将JS脚本注入UIWebView时,我的iOS应用程序在快速应用程序切换期间(从Safari到我的应用程序)被冻结。
在XCode控制台中,我收到以下错误消息:

  等待10秒后

无法返回。主运行循环   模式:kCFRunLoopDefaultMode ...

有时应用程序不会被冻结,但错误消息显示完全相同。

我通过在1秒的间隔后运行JS注入代码来解决这个问题。我按如下方式实现了它:

在FB会话更改的回调中,我使用NSObject的{​​{1}}方法在1秒内调用我的JS回调。这是我的代码示例:

performSelector:withObject:afterDelay:

它有效,但我担心它不是一个可靠的解决方案。例如,在某些情况下,1秒可能还不够。

如何以更可靠的方式实现相同的效果?

1 个答案:

答案 0 :(得分:0)

嗯,结果很简单。我使用UIApplicationState,就像这样:

/*
 * Callback for session changes.
*/
- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:      (NSError   *)error
{
  switch (state) {
    case FBSessionStateOpen:
      if (!error) {
        // We have a valid session
        UIApplicationState appState = [[UIApplication sharedApplication] applicationState];

        NSLog(@"We have a valid session, app state: %u",appState);

        if (UIApplicationStateActive == appState){
            [self jsCallback:session];
        } else {
            self.fbSessionJustOpened = YES;
        }
      }
    break;

    // the rest of the method is omitted
}

UIApplicationDelegate的{​​{1}}方法中:

applicationDidBecomeActive