cordova-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jonathan Li (JIRA)" <>
Subject [jira] [Created] (CB-11422) ios SplashScreen plugin may make webview disabled by not calling destroyView method
Date Mon, 13 Jun 2016 14:59:20 GMT
Jonathan Li created CB-11422:

             Summary: ios SplashScreen plugin may make webview disabled by not calling destroyView
                 Key: CB-11422
             Project: Apache Cordova
          Issue Type: Bug
          Components: Plugin SplashScreen
    Affects Versions: 3.5.0
         Environment: ios
            Reporter: Jonathan Li

When using ios splash screen, it is noticed sometimes, after the splash screen is dimissed,
the ios main uiwebview is disabled. So even if the content in the webview shows properly,
but user cannot click on any items on the screen.

The project adds the splash screen plugin, and use all default settings. 

The debug shows, when the page loaded is finished, it calls pageDidLoad method, which calls
setVisible to NO. Inside the setVisible method, in the dispatch_after block, the completion
block will only call destroyViews method if the screen transition is finished at below code
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (uint64_t) effectiveSplashDuration * NSEC_PER_SEC),
dispatch_get_main_queue(), CFBridgingRelease(CFBridgingRetain(^(void) {
                NSLog(@"splash screen: block %@", NSStringFromSelector(_cmd));
                  [UIView transitionWithView:self.viewController.view
                                   duration:(fadeDuration / 1000)
                                   animations:^(void) {
                                       [weakSelf hideViews];
                                   completion:^(BOOL finished) {
                                      NSLog(@"splash screen: %@ finished %d", NSStringFromSelector(_cmd),
                                       if (finished) {
                                           [weakSelf destroyViews];
                                           // TODO: It might also be nice to have a js event
happen here -jm

The problem is if the webview is busy to handle other events (in the testing project, there
are several update on frame and bounds, so it calls updateImage few times), then the transition
will not be finished when completion block is called. As a result, the destroyView will not
be called and the userInteractionEnabled is not set to true after the splash screen is dismissed.

One possible solution is removing the observer and also enable user interaction within setVisible
method, as there is no point to continue observer the frame and bound change when splash screen
starts to fade out. And it can also be sure the user interaction is always enabled again after
dismissing the splash screen.

This message was sent by Atlassian JIRA

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message