You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by sh...@apache.org on 2014/11/03 10:21:45 UTC

ios commit: Cleaned up CDVWebViewProxy code for redundancies.

Repository: cordova-ios
Updated Branches:
  refs/heads/wkwebview 9ec77c098 -> 5bb424575


Cleaned up CDVWebViewProxy code for redundancies.


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

Branch: refs/heads/wkwebview
Commit: 5bb42457549a29f3720b3b1ce75c65f01e3db48a
Parents: 9ec77c0
Author: Shazron Abdullah <sh...@apache.org>
Authored: Mon Nov 3 01:21:43 2014 -0800
Committer: Shazron Abdullah <sh...@apache.org>
Committed: Mon Nov 3 01:21:43 2014 -0800

----------------------------------------------------------------------
 CordovaLib/Classes/CDVWebViewProxy.m | 77 ++++++++++++-------------------
 1 file changed, 30 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/5bb42457/CordovaLib/Classes/CDVWebViewProxy.m
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVWebViewProxy.m b/CordovaLib/Classes/CDVWebViewProxy.m
index dad0a15..03b8049 100644
--- a/CordovaLib/Classes/CDVWebViewProxy.m
+++ b/CordovaLib/Classes/CDVWebViewProxy.m
@@ -18,16 +18,36 @@
  */
 
 #import <objc/message.h>
+#import <WebKit/WebKit.h>
 #import "CDVWebViewProxy.h"
 
+@interface UIWebView (Extensions)
+
+- (void)evaluateJavaScript:(NSString*)javaScriptString completionHandler:(void (^)(id, NSError*))completionHandler;
+
+@end
+
+@implementation UIWebView (Extensions)
+
+- (void)evaluateJavaScript:(NSString*)javaScriptString completionHandler:(void (^)(id, NSError*))completionHandler
+{
+    NSString* ret = [self stringByEvaluatingJavaScriptFromString:javaScriptString];
+
+    completionHandler(ret, nil);
+}
+
+@end
+
+// see forwardingTargetForSelector: selector comment for the reason for this pragma
+#pragma clang diagnostic ignored "-Wincomplete-implementation"
+
 @implementation CDVWebViewProxy
 
 - (instancetype)initWithWebView:(UIView*)webView
 {
     self = [super init];
     if (self) {
-        Class wk_class = NSClassFromString(@"WKWebView");
-        if (!([webView isKindOfClass:wk_class] || [webView isKindOfClass:[UIWebView class]])) {
+        if (!([webView isKindOfClass:[WKWebView class]] || [webView isKindOfClass:[UIWebView class]])) {
             return nil;
         }
         _webView = webView;
@@ -36,16 +56,9 @@
     return self;
 }
 
-- (void)loadRequest:(NSURLRequest*)request
-{
-    SEL selector = @selector(loadRequest:);
-
-    if ([_webView respondsToSelector:selector]) {
-        // UIKit operations have to be on the main thread. and this method is synchronous
-        [_webView performSelectorOnMainThread:selector withObject:request waitUntilDone:YES];
-    }
-}
-
+// We implement this here because certain versions of iOS 8 do not implement this
+// in WKWebView, so we need to test for this during runtime.
+// It is speculated that this selector will be available in iOS 8.2 for WKWebView
 - (void)loadFileURL:(NSURL*)url allowingReadAccessToURL:(NSURL*)readAccessURL
 {
     SEL wk_sel = @selector(loadFileURL:allowingReadAccessToURL:);
@@ -61,41 +74,11 @@
         });
 }
 
-- (void)loadHTMLString:(NSString*)string baseURL:(NSURL*)baseURL
-{
-    SEL selector = @selector(loadHTMLString:baseURL:);
-
-    dispatch_block_t invoke = ^(void) {
-        ((void (*)(id, SEL, id, id))objc_msgSend)(_webView, selector, string, baseURL);
-    };
-
-    if ([_webView respondsToSelector:selector]) {
-        // UIKit operations have to be on the main thread.
-        // perform a synchronous invoke on the main thread without deadlocking
-        if ([NSThread isMainThread]) {
-            invoke();
-        } else {
-            dispatch_sync(dispatch_get_main_queue(), invoke);
-        }
-    }
-}
-
-- (void)evaluateJavaScript:(NSString*)javaScriptString completionHandler:(void (^)(id, NSError*))completionHandler
-{
-    SEL ui_sel = @selector(stringByEvaluatingJavaScriptFromString:);
-    SEL wk_sel = @selector(evaluateJavaScript:completionHandler:);
-
-    // UIKit operations have to be on the main thread. This method does not need to be synchronous
-    dispatch_async(dispatch_get_main_queue(), ^{
-            if ([_webView respondsToSelector:ui_sel]) {
-                NSString* ret = ((NSString * (*)(id, SEL, id))objc_msgSend)(_webView, ui_sel, javaScriptString);
-                completionHandler(ret, nil);
-            } else if ([_webView respondsToSelector:wk_sel]) {
-                ((void (*)(id, SEL, id, id))objc_msgSend)(_webView, wk_sel, javaScriptString, completionHandler);
-            }
-        });
-}
-
+// This forwards the methods that are in the header that are not implemented here.
+// Both WKWebView and UIWebView implement the below:
+//     loadHTMLString:baseURL:
+//     loadRequest:
+//     evaluateJavaScript:completionHandler: (UIWebView implements in Category above)
 - (id)forwardingTargetForSelector:(SEL)aSelector
 {
     return _webView;


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