cordova-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From shaz...@apache.org
Subject [30/50] ios commit: CB-7606 - handleOpenURL handler firing more than necessary
Date Fri, 31 Oct 2014 23:43:50 GMT
CB-7606 - handleOpenURL handler firing more than necessary

- plus style fixups through uncrustify


Project: http://git-wip-us.apache.org/repos/asf/cordova-ios/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-ios/commit/01b3d191
Tree: http://git-wip-us.apache.org/repos/asf/cordova-ios/tree/01b3d191
Diff: http://git-wip-us.apache.org/repos/asf/cordova-ios/diff/01b3d191

Branch: refs/heads/wkwebview
Commit: 01b3d191d47b5f5b9549a1174b0d92ae0f0a901d
Parents: 6506b22
Author: Shazron Abdullah <shazron@apache.org>
Authored: Tue Oct 21 01:52:40 2014 -0700
Committer: Shazron Abdullah <shazron@apache.org>
Committed: Tue Oct 21 01:52:40 2014 -0700

----------------------------------------------------------------------
 CordovaLib/Classes/CDVViewController.h          |  1 +
 CordovaLib/Classes/CDVViewController.m          | 35 ++++++++++++++------
 .../__PROJECT_NAME__/Classes/AppDelegate.m      | 18 +++++-----
 3 files changed, 34 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/01b3d191/CordovaLib/Classes/CDVViewController.h
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVViewController.h b/CordovaLib/Classes/CDVViewController.h
index 1d34ddd..51863a5 100644
--- a/CordovaLib/Classes/CDVViewController.h
+++ b/CordovaLib/Classes/CDVViewController.h
@@ -79,5 +79,6 @@
 - (void)registerPlugin:(CDVPlugin*)plugin withPluginName:(NSString*)pluginName;
 
 - (BOOL)URLisAllowed:(NSURL*)url;
+- (void)processOpenUrl:(NSURL*)url;
 
 @end

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/01b3d191/CordovaLib/Classes/CDVViewController.m
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVViewController.m b/CordovaLib/Classes/CDVViewController.m
index 9f02d82..acb88f7 100644
--- a/CordovaLib/Classes/CDVViewController.m
+++ b/CordovaLib/Classes/CDVViewController.m
@@ -72,7 +72,8 @@
                                                      name:UIApplicationWillEnterForegroundNotification
object:nil];
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onAppDidEnterBackground:)
                                                      name:UIApplicationDidEnterBackgroundNotification
object:nil];
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleOpenURL:)
name:CDVPluginHandleOpenURLNotification object:nil];
+        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onPageDidLoad:)
+                                                     name:CDVPageDidLoadNotification object:nil];
 
         // read from UISupportedInterfaceOrientations (or UISupportedInterfaceOrientations~iPad,
if its iPad) from -Info.plist
         self.supportedOrientations = [self parseInterfaceOrientations:
@@ -562,7 +563,7 @@
 - (NSString*)userAgent
 {
     if (_userAgent == nil) {
-        NSString *localBaseUserAgent;
+        NSString* localBaseUserAgent;
         if (self.baseUserAgent != nil) {
             localBaseUserAgent = self.baseUserAgent;
         } else {
@@ -649,8 +650,6 @@
      */
     [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
 
-    [self processOpenUrl];
-
     [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPageDidLoadNotification
object:self.webView]];
 }
 
@@ -953,21 +952,37 @@
 
 // ///////////////////////
 
-- (void)handleOpenURL:(NSNotification*)notification
+- (void)onPageDidLoad:(NSNotification*)notification
 {
-    self.openURL = notification.object;
+    if (self.openURL) {
+        [self processOpenUrl:self.openURL pageLoaded:YES];
+        self.openURL = nil;
+    }
 }
 
-- (void)processOpenUrl
+- (void)processOpenUrl:(NSURL*)url pageLoaded:(BOOL)pageLoaded
 {
-    if (self.openURL) {
+    if (!pageLoaded) {
+        // query the webview for readystate
+        NSString* readyState = [webView stringByEvaluatingJavaScriptFromString:@"document.readyState"];
+        pageLoaded = [readyState isEqualToString:@"loaded"] || [readyState isEqualToString:@"complete"];
+    }
+
+    if (pageLoaded) {
         // calls into javascript global function 'handleOpenURL'
-        NSString* jsString = [NSString stringWithFormat:@"handleOpenURL(\"%@\");", [self.openURL
description]];
+        NSString* jsString = [NSString stringWithFormat:@"if (typeof handleOpenURL === 'function')
{ handleOpenURL(\"%@\");}", url];
         [self.webView stringByEvaluatingJavaScriptFromString:jsString];
-        self.openURL = nil;
+    } else {
+        // save for when page has loaded
+        self.openURL = url;
     }
 }
 
+- (void)processOpenUrl:(NSURL*)url
+{
+    [self processOpenUrl:url pageLoaded:NO];
+}
+
 // ///////////////////////
 
 - (void)dealloc

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/01b3d191/bin/templates/project/__PROJECT_NAME__/Classes/AppDelegate.m
----------------------------------------------------------------------
diff --git a/bin/templates/project/__PROJECT_NAME__/Classes/AppDelegate.m b/bin/templates/project/__PROJECT_NAME__/Classes/AppDelegate.m
index 1cf7fb6..fe4a7a0 100644
--- a/bin/templates/project/__PROJECT_NAME__/Classes/AppDelegate.m
+++ b/bin/templates/project/__PROJECT_NAME__/Classes/AppDelegate.m
@@ -99,9 +99,7 @@
         return NO;
     }
 
-    // calls into javascript global function 'handleOpenURL'
-    NSString* jsString = [NSString stringWithFormat:@"if (typeof handleOpenURL === 'function')
{ handleOpenURL(\"%@\");}", url];
-    [self.viewController.webView stringByEvaluatingJavaScriptFromString:jsString];
+    [self.viewController processOpenUrl:url];
 
     // all plugins will get the notification, and their handlers will be called
     [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification
object:url]];
@@ -117,20 +115,20 @@
     [[NSNotificationCenter defaultCenter] postNotificationName:CDVLocalNotification object:notification];
 }
 
-- (void)                                application:(UIApplication *)application
-   didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
+- (void)                                 application:(UIApplication*)application
+    didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
 {
     // re-post ( broadcast )
     NSString* token = [[[[deviceToken description]
-                         stringByReplacingOccurrencesOfString: @"<" withString: @""]
-                        stringByReplacingOccurrencesOfString: @">" withString: @""]
-                       stringByReplacingOccurrencesOfString: @" " withString: @""];
+        stringByReplacingOccurrencesOfString:@"<" withString:@""]
+        stringByReplacingOccurrencesOfString:@">" withString:@""]
+        stringByReplacingOccurrencesOfString:@" " withString:@""];
 
     [[NSNotificationCenter defaultCenter] postNotificationName:CDVRemoteNotification object:token];
 }
 
-- (void)                                 application:(UIApplication *)application
-    didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
+- (void)                                 application:(UIApplication*)application
+    didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
 {
     // re-post ( broadcast )
     [[NSNotificationCenter defaultCenter] postNotificationName:CDVRemoteNotificationError
object:error];


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


Mime
View raw message