| 
				
			 | 
			
			
				@@ -81,6 +81,9 @@ static NSDictionary* customCertificatesForHost; 
			 | 
		
	
		
			
			| 
				81
			 | 
			
				81
			 | 
			
			
				 #else 
			 | 
		
	
		
			
			| 
				82
			 | 
			
				82
			 | 
			
			
				 @property (nonatomic, copy) RNCWKWebView *webView; 
			 | 
		
	
		
			
			| 
				83
			 | 
			
				83
			 | 
			
			
				 #endif // !TARGET_OS_OSX 
			 | 
		
	
		
			
			| 
				
			 | 
			
				84
			 | 
			
			
				+@property (nonatomic, strong) WKUserScript *postMessageScript; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				85
			 | 
			
			
				+@property (nonatomic, strong) WKUserScript *atStartScript; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				86
			 | 
			
			
				+@property (nonatomic, strong) WKUserScript *atEndScript; 
			 | 
		
	
		
			
			| 
				84
			 | 
			
				87
			 | 
			
			
				 @end 
			 | 
		
	
		
			
			| 
				85
			 | 
			
				88
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				86
			 | 
			
				89
			 | 
			
			
				 @implementation RNCWebView 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -122,10 +125,14 @@ static NSDictionary* customCertificatesForHost; 
			 | 
		
	
		
			
			| 
				122
			 | 
			
				125
			 | 
			
			
				     _automaticallyAdjustContentInsets = YES; 
			 | 
		
	
		
			
			| 
				123
			 | 
			
				126
			 | 
			
			
				     _contentInset = UIEdgeInsetsZero; 
			 | 
		
	
		
			
			| 
				124
			 | 
			
				127
			 | 
			
			
				     _savedKeyboardDisplayRequiresUserAction = YES; 
			 | 
		
	
		
			
			| 
				125
			 | 
			
				
			 | 
			
			
				-#if !TARGET_OS_OSX 
			 | 
		
	
		
			
			| 
				
			 | 
			
				128
			 | 
			
			
				+    #if !TARGET_OS_OSX 
			 | 
		
	
		
			
			| 
				126
			 | 
			
				129
			 | 
			
			
				     _savedStatusBarStyle = RCTSharedApplication().statusBarStyle; 
			 | 
		
	
		
			
			| 
				127
			 | 
			
				130
			 | 
			
			
				     _savedStatusBarHidden = RCTSharedApplication().statusBarHidden; 
			 | 
		
	
		
			
			| 
				128
			 | 
			
				
			 | 
			
			
				-#endif // !TARGET_OS_OSX 
			 | 
		
	
		
			
			| 
				
			 | 
			
				131
			 | 
			
			
				+    #endif // !TARGET_OS_OSX 
			 | 
		
	
		
			
			| 
				
			 | 
			
				132
			 | 
			
			
				+    _injectedJavaScript = nil; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				133
			 | 
			
			
				+    _injectedJavaScriptForMainFrameOnly = YES; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				134
			 | 
			
			
				+    _injectedJavaScriptBeforeContentLoaded = nil; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				135
			 | 
			
			
				+    _injectedJavaScriptBeforeContentLoadedForMainFrameOnly = YES; 
			 | 
		
	
		
			
			| 
				129
			 | 
			
				136
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				130
			 | 
			
				137
			 | 
			
			
				 #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 /* __IPHONE_11_0 */ 
			 | 
		
	
		
			
			| 
				131
			 | 
			
				138
			 | 
			
			
				     _savedContentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -206,50 +213,7 @@ static NSDictionary* customCertificatesForHost; 
			 | 
		
	
		
			
			| 
				206
			 | 
			
				213
			 | 
			
			
				   // Shim the HTML5 history API: 
			 | 
		
	
		
			
			| 
				207
			 | 
			
				214
			 | 
			
			
				   [wkWebViewConfig.userContentController addScriptMessageHandler:[[RNCWeakScriptMessageDelegate alloc] initWithDelegate:self] 
			 | 
		
	
		
			
			| 
				208
			 | 
			
				215
			 | 
			
			
				                                                             name:HistoryShimName]; 
			 | 
		
	
		
			
			| 
				209
			 | 
			
				
			 | 
			
			
				-  NSString *source = [NSString stringWithFormat: 
			 | 
		
	
		
			
			| 
				210
			 | 
			
				
			 | 
			
			
				-    @"(function(history) {\n" 
			 | 
		
	
		
			
			| 
				211
			 | 
			
				
			 | 
			
			
				-    "  function notify(type) {\n" 
			 | 
		
	
		
			
			| 
				212
			 | 
			
				
			 | 
			
			
				-    "    setTimeout(function() {\n" 
			 | 
		
	
		
			
			| 
				213
			 | 
			
				
			 | 
			
			
				-    "      window.webkit.messageHandlers.%@.postMessage(type)\n" 
			 | 
		
	
		
			
			| 
				214
			 | 
			
				
			 | 
			
			
				-    "    }, 0)\n" 
			 | 
		
	
		
			
			| 
				215
			 | 
			
				
			 | 
			
			
				-    "  }\n" 
			 | 
		
	
		
			
			| 
				216
			 | 
			
				
			 | 
			
			
				-    "  function shim(f) {\n" 
			 | 
		
	
		
			
			| 
				217
			 | 
			
				
			 | 
			
			
				-    "    return function pushState() {\n" 
			 | 
		
	
		
			
			| 
				218
			 | 
			
				
			 | 
			
			
				-    "      notify('other')\n" 
			 | 
		
	
		
			
			| 
				219
			 | 
			
				
			 | 
			
			
				-    "      return f.apply(history, arguments)\n" 
			 | 
		
	
		
			
			| 
				220
			 | 
			
				
			 | 
			
			
				-    "    }\n" 
			 | 
		
	
		
			
			| 
				221
			 | 
			
				
			 | 
			
			
				-    "  }\n" 
			 | 
		
	
		
			
			| 
				222
			 | 
			
				
			 | 
			
			
				-    "  history.pushState = shim(history.pushState)\n" 
			 | 
		
	
		
			
			| 
				223
			 | 
			
				
			 | 
			
			
				-    "  history.replaceState = shim(history.replaceState)\n" 
			 | 
		
	
		
			
			| 
				224
			 | 
			
				
			 | 
			
			
				-    "  window.addEventListener('popstate', function() {\n" 
			 | 
		
	
		
			
			| 
				225
			 | 
			
				
			 | 
			
			
				-    "    notify('backforward')\n" 
			 | 
		
	
		
			
			| 
				226
			 | 
			
				
			 | 
			
			
				-    "  })\n" 
			 | 
		
	
		
			
			| 
				227
			 | 
			
				
			 | 
			
			
				-    "})(window.history)\n", HistoryShimName 
			 | 
		
	
		
			
			| 
				228
			 | 
			
				
			 | 
			
			
				-  ]; 
			 | 
		
	
		
			
			| 
				229
			 | 
			
				
			 | 
			
			
				-  WKUserScript *script = [[WKUserScript alloc] initWithSource:source injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES]; 
			 | 
		
	
		
			
			| 
				230
			 | 
			
				
			 | 
			
			
				-  [wkWebViewConfig.userContentController addUserScript:script]; 
			 | 
		
	
		
			
			| 
				231
			 | 
			
				
			 | 
			
			
				- 
			 | 
		
	
		
			
			| 
				232
			 | 
			
				
			 | 
			
			
				-  if (_messagingEnabled) { 
			 | 
		
	
		
			
			| 
				233
			 | 
			
				
			 | 
			
			
				-    [wkWebViewConfig.userContentController addScriptMessageHandler:[[RNCWeakScriptMessageDelegate alloc] initWithDelegate:self] 
			 | 
		
	
		
			
			| 
				234
			 | 
			
				
			 | 
			
			
				-                                                              name:MessageHandlerName]; 
			 | 
		
	
		
			
			| 
				235
			 | 
			
				
			 | 
			
			
				- 
			 | 
		
	
		
			
			| 
				236
			 | 
			
				
			 | 
			
			
				-    NSString *source = [NSString stringWithFormat: 
			 | 
		
	
		
			
			| 
				237
			 | 
			
				
			 | 
			
			
				-      @"window.%@ = {" 
			 | 
		
	
		
			
			| 
				238
			 | 
			
				
			 | 
			
			
				-       "  postMessage: function (data) {" 
			 | 
		
	
		
			
			| 
				239
			 | 
			
				
			 | 
			
			
				-       "    window.webkit.messageHandlers.%@.postMessage(String(data));" 
			 | 
		
	
		
			
			| 
				240
			 | 
			
				
			 | 
			
			
				-       "  }" 
			 | 
		
	
		
			
			| 
				241
			 | 
			
				
			 | 
			
			
				-       "};", MessageHandlerName, MessageHandlerName 
			 | 
		
	
		
			
			| 
				242
			 | 
			
				
			 | 
			
			
				-    ]; 
			 | 
		
	
		
			
			| 
				243
			 | 
			
				
			 | 
			
			
				- 
			 | 
		
	
		
			
			| 
				244
			 | 
			
				
			 | 
			
			
				-    WKUserScript *script = [[WKUserScript alloc] initWithSource:source injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES]; 
			 | 
		
	
		
			
			| 
				245
			 | 
			
				
			 | 
			
			
				-    [wkWebViewConfig.userContentController addUserScript:script]; 
			 | 
		
	
		
			
			| 
				246
			 | 
			
				
			 | 
			
			
				-       
			 | 
		
	
		
			
			| 
				247
			 | 
			
				
			 | 
			
			
				-    if (_injectedJavaScriptBeforeContentLoaded) { 
			 | 
		
	
		
			
			| 
				248
			 | 
			
				
			 | 
			
			
				-      // If user has provided an injectedJavascript prop, execute it at the start of the document 
			 | 
		
	
		
			
			| 
				249
			 | 
			
				
			 | 
			
			
				-      WKUserScript *injectedScript = [[WKUserScript alloc] initWithSource:_injectedJavaScriptBeforeContentLoaded injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES]; 
			 | 
		
	
		
			
			| 
				250
			 | 
			
				
			 | 
			
			
				-      [wkWebViewConfig.userContentController addUserScript:injectedScript]; 
			 | 
		
	
		
			
			| 
				251
			 | 
			
				
			 | 
			
			
				-    } 
			 | 
		
	
		
			
			| 
				252
			 | 
			
				
			 | 
			
			
				-  } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				216
			 | 
			
			
				+  [self resetupScripts:wkWebViewConfig]; 
			 | 
		
	
		
			
			| 
				253
			 | 
			
				217
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				254
			 | 
			
				218
			 | 
			
			
				 #if !TARGET_OS_OSX 
			 | 
		
	
		
			
			| 
				255
			 | 
			
				219
			 | 
			
			
				   wkWebViewConfig.allowsInlineMediaPlayback = _allowsInlineMediaPlayback; 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -266,68 +230,6 @@ static NSDictionary* customCertificatesForHost; 
			 | 
		
	
		
			
			| 
				266
			 | 
			
				230
			 | 
			
			
				   if (_applicationNameForUserAgent) { 
			 | 
		
	
		
			
			| 
				267
			 | 
			
				231
			 | 
			
			
				       wkWebViewConfig.applicationNameForUserAgent = [NSString stringWithFormat:@"%@ %@", wkWebViewConfig.applicationNameForUserAgent, _applicationNameForUserAgent]; 
			 | 
		
	
		
			
			| 
				268
			 | 
			
				232
			 | 
			
			
				   } 
			 | 
		
	
		
			
			| 
				269
			 | 
			
				
			 | 
			
			
				- 
			 | 
		
	
		
			
			| 
				270
			 | 
			
				
			 | 
			
			
				-  if(_sharedCookiesEnabled) { 
			 | 
		
	
		
			
			| 
				271
			 | 
			
				
			 | 
			
			
				-    // More info to sending cookies with WKWebView 
			 | 
		
	
		
			
			| 
				272
			 | 
			
				
			 | 
			
			
				-    // https://stackoverflow.com/questions/26573137/can-i-set-the-cookies-to-be-used-by-a-wkwebview/26577303#26577303 
			 | 
		
	
		
			
			| 
				273
			 | 
			
				
			 | 
			
			
				-    if (@available(iOS 11.0, *)) { 
			 | 
		
	
		
			
			| 
				274
			 | 
			
				
			 | 
			
			
				-      // Set Cookies in iOS 11 and above, initialize websiteDataStore before setting cookies 
			 | 
		
	
		
			
			| 
				275
			 | 
			
				
			 | 
			
			
				-      // See also https://forums.developer.apple.com/thread/97194 
			 | 
		
	
		
			
			| 
				276
			 | 
			
				
			 | 
			
			
				-      // check if websiteDataStore has not been initialized before 
			 | 
		
	
		
			
			| 
				277
			 | 
			
				
			 | 
			
			
				-      if(!_incognito && !_cacheEnabled) { 
			 | 
		
	
		
			
			| 
				278
			 | 
			
				
			 | 
			
			
				-        wkWebViewConfig.websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore]; 
			 | 
		
	
		
			
			| 
				279
			 | 
			
				
			 | 
			
			
				-      } 
			 | 
		
	
		
			
			| 
				280
			 | 
			
				
			 | 
			
			
				-      for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) { 
			 | 
		
	
		
			
			| 
				281
			 | 
			
				
			 | 
			
			
				-        [wkWebViewConfig.websiteDataStore.httpCookieStore setCookie:cookie completionHandler:nil]; 
			 | 
		
	
		
			
			| 
				282
			 | 
			
				
			 | 
			
			
				-      } 
			 | 
		
	
		
			
			| 
				283
			 | 
			
				
			 | 
			
			
				-    } else { 
			 | 
		
	
		
			
			| 
				284
			 | 
			
				
			 | 
			
			
				-      NSMutableString *script = [NSMutableString string]; 
			 | 
		
	
		
			
			| 
				285
			 | 
			
				
			 | 
			
			
				- 
			 | 
		
	
		
			
			| 
				286
			 | 
			
				
			 | 
			
			
				-      // Clear all existing cookies in a direct called function. This ensures that no 
			 | 
		
	
		
			
			| 
				287
			 | 
			
				
			 | 
			
			
				-      // javascript error will break the web content javascript. 
			 | 
		
	
		
			
			| 
				288
			 | 
			
				
			 | 
			
			
				-      // We keep this code here, if someone requires that Cookies are also removed within the 
			 | 
		
	
		
			
			| 
				289
			 | 
			
				
			 | 
			
			
				-      // the WebView and want to extends the current sharedCookiesEnabled option with an 
			 | 
		
	
		
			
			| 
				290
			 | 
			
				
			 | 
			
			
				-      // additional property. 
			 | 
		
	
		
			
			| 
				291
			 | 
			
				
			 | 
			
			
				-      // Generates JS: document.cookie = "key=; Expires=Thu, 01 Jan 1970 00:00:01 GMT;" 
			 | 
		
	
		
			
			| 
				292
			 | 
			
				
			 | 
			
			
				-      // for each cookie which is already available in the WebView context. 
			 | 
		
	
		
			
			| 
				293
			 | 
			
				
			 | 
			
			
				-      /* 
			 | 
		
	
		
			
			| 
				294
			 | 
			
				
			 | 
			
			
				-      [script appendString:@"(function () {\n"]; 
			 | 
		
	
		
			
			| 
				295
			 | 
			
				
			 | 
			
			
				-      [script appendString:@"  var cookies = document.cookie.split('; ');\n"]; 
			 | 
		
	
		
			
			| 
				296
			 | 
			
				
			 | 
			
			
				-      [script appendString:@"  for (var i = 0; i < cookies.length; i++) {\n"]; 
			 | 
		
	
		
			
			| 
				297
			 | 
			
				
			 | 
			
			
				-      [script appendString:@"    if (cookies[i].indexOf('=') !== -1) {\n"]; 
			 | 
		
	
		
			
			| 
				298
			 | 
			
				
			 | 
			
			
				-      [script appendString:@"      document.cookie = cookies[i].split('=')[0] + '=; Expires=Thu, 01 Jan 1970 00:00:01 GMT';\n"]; 
			 | 
		
	
		
			
			| 
				299
			 | 
			
				
			 | 
			
			
				-      [script appendString:@"    }\n"]; 
			 | 
		
	
		
			
			| 
				300
			 | 
			
				
			 | 
			
			
				-      [script appendString:@"  }\n"]; 
			 | 
		
	
		
			
			| 
				301
			 | 
			
				
			 | 
			
			
				-      [script appendString:@"})();\n\n"]; 
			 | 
		
	
		
			
			| 
				302
			 | 
			
				
			 | 
			
			
				-      */ 
			 | 
		
	
		
			
			| 
				303
			 | 
			
				
			 | 
			
			
				- 
			 | 
		
	
		
			
			| 
				304
			 | 
			
				
			 | 
			
			
				-      // Set cookies in a direct called function. This ensures that no 
			 | 
		
	
		
			
			| 
				305
			 | 
			
				
			 | 
			
			
				-      // javascript error will break the web content javascript. 
			 | 
		
	
		
			
			| 
				306
			 | 
			
				
			 | 
			
			
				-        // Generates JS: document.cookie = "key=value; Path=/; Expires=Thu, 01 Jan 20xx 00:00:01 GMT;" 
			 | 
		
	
		
			
			| 
				307
			 | 
			
				
			 | 
			
			
				-      // for each cookie which is available in the application context. 
			 | 
		
	
		
			
			| 
				308
			 | 
			
				
			 | 
			
			
				-      [script appendString:@"(function () {\n"]; 
			 | 
		
	
		
			
			| 
				309
			 | 
			
				
			 | 
			
			
				-      for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) { 
			 | 
		
	
		
			
			| 
				310
			 | 
			
				
			 | 
			
			
				-        [script appendFormat:@"document.cookie = %@ + '=' + %@", 
			 | 
		
	
		
			
			| 
				311
			 | 
			
				
			 | 
			
			
				-          RCTJSONStringify(cookie.name, NULL), 
			 | 
		
	
		
			
			| 
				312
			 | 
			
				
			 | 
			
			
				-          RCTJSONStringify(cookie.value, NULL)]; 
			 | 
		
	
		
			
			| 
				313
			 | 
			
				
			 | 
			
			
				-        if (cookie.path) { 
			 | 
		
	
		
			
			| 
				314
			 | 
			
				
			 | 
			
			
				-          [script appendFormat:@" + '; Path=' + %@", RCTJSONStringify(cookie.path, NULL)]; 
			 | 
		
	
		
			
			| 
				315
			 | 
			
				
			 | 
			
			
				-        } 
			 | 
		
	
		
			
			| 
				316
			 | 
			
				
			 | 
			
			
				-        if (cookie.expiresDate) { 
			 | 
		
	
		
			
			| 
				317
			 | 
			
				
			 | 
			
			
				-          [script appendFormat:@" + '; Expires=' + new Date(%f).toUTCString()", 
			 | 
		
	
		
			
			| 
				318
			 | 
			
				
			 | 
			
			
				-            cookie.expiresDate.timeIntervalSince1970 * 1000 
			 | 
		
	
		
			
			| 
				319
			 | 
			
				
			 | 
			
			
				-          ]; 
			 | 
		
	
		
			
			| 
				320
			 | 
			
				
			 | 
			
			
				-        } 
			 | 
		
	
		
			
			| 
				321
			 | 
			
				
			 | 
			
			
				-        [script appendString:@";\n"]; 
			 | 
		
	
		
			
			| 
				322
			 | 
			
				
			 | 
			
			
				-      } 
			 | 
		
	
		
			
			| 
				323
			 | 
			
				
			 | 
			
			
				-      [script appendString:@"})();\n"]; 
			 | 
		
	
		
			
			| 
				324
			 | 
			
				
			 | 
			
			
				- 
			 | 
		
	
		
			
			| 
				325
			 | 
			
				
			 | 
			
			
				-      WKUserScript* cookieInScript = [[WKUserScript alloc] initWithSource:script 
			 | 
		
	
		
			
			| 
				326
			 | 
			
				
			 | 
			
			
				-                                                            injectionTime:WKUserScriptInjectionTimeAtDocumentStart 
			 | 
		
	
		
			
			| 
				327
			 | 
			
				
			 | 
			
			
				-                                                         forMainFrameOnly:YES]; 
			 | 
		
	
		
			
			| 
				328
			 | 
			
				
			 | 
			
			
				-      [wkWebViewConfig.userContentController addUserScript:cookieInScript]; 
			 | 
		
	
		
			
			| 
				329
			 | 
			
				
			 | 
			
			
				-    } 
			 | 
		
	
		
			
			| 
				330
			 | 
			
				
			 | 
			
			
				-  } 
			 | 
		
	
		
			
			| 
				331
			 | 
			
				233
			 | 
			
			
				    
			 | 
		
	
		
			
			| 
				332
			 | 
			
				234
			 | 
			
			
				   return wkWebViewConfig; 
			 | 
		
	
		
			
			| 
				333
			 | 
			
				235
			 | 
			
			
				 } 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -1136,16 +1038,7 @@ static NSDictionary* customCertificatesForHost; 
			 | 
		
	
		
			
			| 
				1136
			 | 
			
				1038
			 | 
			
			
				 - (void)webView:(WKWebView *)webView 
			 | 
		
	
		
			
			| 
				1137
			 | 
			
				1039
			 | 
			
			
				   didFinishNavigation:(WKNavigation *)navigation 
			 | 
		
	
		
			
			| 
				1138
			 | 
			
				1040
			 | 
			
			
				 { 
			 | 
		
	
		
			
			| 
				1139
			 | 
			
				
			 | 
			
			
				-   if (_injectedJavaScript) { 
			 | 
		
	
		
			
			| 
				1140
			 | 
			
				
			 | 
			
			
				-     [self evaluateJS: _injectedJavaScript thenCall: ^(NSString *jsEvaluationValue) { 
			 | 
		
	
		
			
			| 
				1141
			 | 
			
				
			 | 
			
			
				-       NSMutableDictionary *event = [self baseEvent]; 
			 | 
		
	
		
			
			| 
				1142
			 | 
			
				
			 | 
			
			
				-       event[@"jsEvaluationValue"] = jsEvaluationValue; 
			 | 
		
	
		
			
			| 
				1143
			 | 
			
				
			 | 
			
			
				- 
			 | 
		
	
		
			
			| 
				1144
			 | 
			
				
			 | 
			
			
				-       if (self.onLoadingFinish) { 
			 | 
		
	
		
			
			| 
				1145
			 | 
			
				
			 | 
			
			
				-         self.onLoadingFinish(event); 
			 | 
		
	
		
			
			| 
				1146
			 | 
			
				
			 | 
			
			
				-       } 
			 | 
		
	
		
			
			| 
				1147
			 | 
			
				
			 | 
			
			
				-     }]; 
			 | 
		
	
		
			
			| 
				1148
			 | 
			
				
			 | 
			
			
				-   } else if (_onLoadingFinish) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1041
			 | 
			
			
				+  if (_onLoadingFinish) { 
			 | 
		
	
		
			
			| 
				1149
			 | 
			
				1042
			 | 
			
			
				     _onLoadingFinish([self baseEvent]); 
			 | 
		
	
		
			
			| 
				1150
			 | 
			
				1043
			 | 
			
			
				   } 
			 | 
		
	
		
			
			| 
				1151
			 | 
			
				1044
			 | 
			
			
				 } 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -1194,6 +1087,174 @@ static NSDictionary* customCertificatesForHost; 
			 | 
		
	
		
			
			| 
				1194
			 | 
			
				1087
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				1195
			 | 
			
				1088
			 | 
			
			
				 #endif // !TARGET_OS_OSX 
			 | 
		
	
		
			
			| 
				1196
			 | 
			
				1089
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				1090
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1091
			 | 
			
			
				+- (void)setInjectedJavaScript:(NSString *)source { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1092
			 | 
			
			
				+  _injectedJavaScript = source; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1093
			 | 
			
			
				+   
			 | 
		
	
		
			
			| 
				
			 | 
			
				1094
			 | 
			
			
				+  self.atEndScript = source == nil ? nil : [[WKUserScript alloc] initWithSource:source 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1095
			 | 
			
			
				+      injectionTime:WKUserScriptInjectionTimeAtDocumentEnd 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1096
			 | 
			
			
				+    forMainFrameOnly:_injectedJavaScriptForMainFrameOnly]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1097
			 | 
			
			
				+   
			 | 
		
	
		
			
			| 
				
			 | 
			
				1098
			 | 
			
			
				+  if(_webView != nil){ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1099
			 | 
			
			
				+    [self resetupScripts:_webView.configuration]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1100
			 | 
			
			
				+  } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1101
			 | 
			
			
				+} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1102
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1103
			 | 
			
			
				+- (void)setInjectedJavaScriptBeforeContentLoaded:(NSString *)source { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1104
			 | 
			
			
				+  _injectedJavaScriptBeforeContentLoaded = source; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1105
			 | 
			
			
				+   
			 | 
		
	
		
			
			| 
				
			 | 
			
				1106
			 | 
			
			
				+  self.atStartScript = source == nil ? nil : [[WKUserScript alloc] initWithSource:source 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1107
			 | 
			
			
				+       injectionTime:WKUserScriptInjectionTimeAtDocumentStart 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1108
			 | 
			
			
				+    forMainFrameOnly:_injectedJavaScriptBeforeContentLoadedForMainFrameOnly]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1109
			 | 
			
			
				+   
			 | 
		
	
		
			
			| 
				
			 | 
			
				1110
			 | 
			
			
				+  if(_webView != nil){ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1111
			 | 
			
			
				+    [self resetupScripts:_webView.configuration]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1112
			 | 
			
			
				+  } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1113
			 | 
			
			
				+} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1114
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1115
			 | 
			
			
				+- (void)setInjectedJavaScriptForMainFrameOnly:(BOOL)mainFrameOnly { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1116
			 | 
			
			
				+  _injectedJavaScriptForMainFrameOnly = mainFrameOnly; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1117
			 | 
			
			
				+  [self setInjectedJavaScript:_injectedJavaScript]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1118
			 | 
			
			
				+} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1119
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1120
			 | 
			
			
				+- (void)setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly:(BOOL)mainFrameOnly { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1121
			 | 
			
			
				+  _injectedJavaScriptBeforeContentLoadedForMainFrameOnly = mainFrameOnly; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1122
			 | 
			
			
				+  [self setInjectedJavaScriptBeforeContentLoaded:_injectedJavaScriptBeforeContentLoaded]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1123
			 | 
			
			
				+} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1124
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1125
			 | 
			
			
				+- (void)setMessagingEnabled:(BOOL)messagingEnabled { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1126
			 | 
			
			
				+  _messagingEnabled = messagingEnabled; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1127
			 | 
			
			
				+   
			 | 
		
	
		
			
			| 
				
			 | 
			
				1128
			 | 
			
			
				+  self.postMessageScript = _messagingEnabled ? 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1129
			 | 
			
			
				+  [ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1130
			 | 
			
			
				+   [WKUserScript alloc] 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1131
			 | 
			
			
				+   initWithSource: [ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1132
			 | 
			
			
				+                    NSString 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1133
			 | 
			
			
				+                    stringWithFormat: 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1134
			 | 
			
			
				+                    @"window.%@ = {" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1135
			 | 
			
			
				+                    "  postMessage: function (data) {" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1136
			 | 
			
			
				+                    "    window.webkit.messageHandlers.%@.postMessage(String(data));" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1137
			 | 
			
			
				+                    "  }" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1138
			 | 
			
			
				+                    "};", MessageHandlerName, MessageHandlerName 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1139
			 | 
			
			
				+                    ] 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1140
			 | 
			
			
				+   injectionTime:WKUserScriptInjectionTimeAtDocumentStart 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1141
			 | 
			
			
				+   /* TODO: For a separate (minor) PR: use logic like this (as react-native-wkwebview does) so that messaging can be used in all frames if desired. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1142
			 | 
			
			
				+    *       I am keeping it as YES for consistency with previous behaviour. */ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1143
			 | 
			
			
				+   // forMainFrameOnly:_messagingEnabledForMainFrameOnly 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1144
			 | 
			
			
				+   forMainFrameOnly:YES 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1145
			 | 
			
			
				+   ] : 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1146
			 | 
			
			
				+  nil; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1147
			 | 
			
			
				+   
			 | 
		
	
		
			
			| 
				
			 | 
			
				1148
			 | 
			
			
				+  if(_webView != nil){ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1149
			 | 
			
			
				+    [self resetupScripts:_webView.configuration]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1150
			 | 
			
			
				+  } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1151
			 | 
			
			
				+} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1152
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1153
			 | 
			
			
				+- (void)resetupScripts:(WKWebViewConfiguration *)wkWebViewConfig { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1154
			 | 
			
			
				+  [wkWebViewConfig.userContentController removeAllUserScripts]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1155
			 | 
			
			
				+  [wkWebViewConfig.userContentController removeScriptMessageHandlerForName:MessageHandlerName]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1156
			 | 
			
			
				+   
			 | 
		
	
		
			
			| 
				
			 | 
			
				1157
			 | 
			
			
				+  NSString *html5HistoryAPIShimSource = [NSString stringWithFormat: 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1158
			 | 
			
			
				+    @"(function(history) {\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1159
			 | 
			
			
				+    "  function notify(type) {\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1160
			 | 
			
			
				+    "    setTimeout(function() {\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1161
			 | 
			
			
				+    "      window.webkit.messageHandlers.%@.postMessage(type)\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1162
			 | 
			
			
				+    "    }, 0)\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1163
			 | 
			
			
				+    "  }\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1164
			 | 
			
			
				+    "  function shim(f) {\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1165
			 | 
			
			
				+    "    return function pushState() {\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1166
			 | 
			
			
				+    "      notify('other')\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1167
			 | 
			
			
				+    "      return f.apply(history, arguments)\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1168
			 | 
			
			
				+    "    }\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1169
			 | 
			
			
				+    "  }\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1170
			 | 
			
			
				+    "  history.pushState = shim(history.pushState)\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1171
			 | 
			
			
				+    "  history.replaceState = shim(history.replaceState)\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1172
			 | 
			
			
				+    "  window.addEventListener('popstate', function() {\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1173
			 | 
			
			
				+    "    notify('backforward')\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1174
			 | 
			
			
				+    "  })\n" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1175
			 | 
			
			
				+    "})(window.history)\n", HistoryShimName 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1176
			 | 
			
			
				+  ]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1177
			 | 
			
			
				+  WKUserScript *script = [[WKUserScript alloc] initWithSource:html5HistoryAPIShimSource injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1178
			 | 
			
			
				+  [wkWebViewConfig.userContentController addUserScript:script]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1179
			 | 
			
			
				+   
			 | 
		
	
		
			
			| 
				
			 | 
			
				1180
			 | 
			
			
				+  if(_sharedCookiesEnabled) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1181
			 | 
			
			
				+    // More info to sending cookies with WKWebView 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1182
			 | 
			
			
				+    // https://stackoverflow.com/questions/26573137/can-i-set-the-cookies-to-be-used-by-a-wkwebview/26577303#26577303 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1183
			 | 
			
			
				+    if (@available(iOS 11.0, *)) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1184
			 | 
			
			
				+      // Set Cookies in iOS 11 and above, initialize websiteDataStore before setting cookies 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1185
			 | 
			
			
				+      // See also https://forums.developer.apple.com/thread/97194 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1186
			 | 
			
			
				+      // check if websiteDataStore has not been initialized before 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1187
			 | 
			
			
				+      if(!_incognito && !_cacheEnabled) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1188
			 | 
			
			
				+        wkWebViewConfig.websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1189
			 | 
			
			
				+      } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1190
			 | 
			
			
				+      for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1191
			 | 
			
			
				+        [wkWebViewConfig.websiteDataStore.httpCookieStore setCookie:cookie completionHandler:nil]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1192
			 | 
			
			
				+      } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1193
			 | 
			
			
				+    } else { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1194
			 | 
			
			
				+      NSMutableString *script = [NSMutableString string]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1195
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1196
			 | 
			
			
				+      // Clear all existing cookies in a direct called function. This ensures that no 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1197
			 | 
			
			
				+      // javascript error will break the web content javascript. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1198
			 | 
			
			
				+      // We keep this code here, if someone requires that Cookies are also removed within the 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1199
			 | 
			
			
				+      // the WebView and want to extends the current sharedCookiesEnabled option with an 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1200
			 | 
			
			
				+      // additional property. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1201
			 | 
			
			
				+      // Generates JS: document.cookie = "key=; Expires=Thu, 01 Jan 1970 00:00:01 GMT;" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1202
			 | 
			
			
				+      // for each cookie which is already available in the WebView context. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1203
			 | 
			
			
				+      /* 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1204
			 | 
			
			
				+      [script appendString:@"(function () {\n"]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1205
			 | 
			
			
				+      [script appendString:@"  var cookies = document.cookie.split('; ');\n"]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1206
			 | 
			
			
				+      [script appendString:@"  for (var i = 0; i < cookies.length; i++) {\n"]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1207
			 | 
			
			
				+      [script appendString:@"    if (cookies[i].indexOf('=') !== -1) {\n"]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1208
			 | 
			
			
				+      [script appendString:@"      document.cookie = cookies[i].split('=')[0] + '=; Expires=Thu, 01 Jan 1970 00:00:01 GMT';\n"]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1209
			 | 
			
			
				+      [script appendString:@"    }\n"]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1210
			 | 
			
			
				+      [script appendString:@"  }\n"]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1211
			 | 
			
			
				+      [script appendString:@"})();\n\n"]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1212
			 | 
			
			
				+      */ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1213
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1214
			 | 
			
			
				+      // Set cookies in a direct called function. This ensures that no 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1215
			 | 
			
			
				+      // javascript error will break the web content javascript. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1216
			 | 
			
			
				+        // Generates JS: document.cookie = "key=value; Path=/; Expires=Thu, 01 Jan 20xx 00:00:01 GMT;" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1217
			 | 
			
			
				+      // for each cookie which is available in the application context. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1218
			 | 
			
			
				+      [script appendString:@"(function () {\n"]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1219
			 | 
			
			
				+      for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1220
			 | 
			
			
				+        [script appendFormat:@"document.cookie = %@ + '=' + %@", 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1221
			 | 
			
			
				+          RCTJSONStringify(cookie.name, NULL), 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1222
			 | 
			
			
				+          RCTJSONStringify(cookie.value, NULL)]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1223
			 | 
			
			
				+        if (cookie.path) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1224
			 | 
			
			
				+          [script appendFormat:@" + '; Path=' + %@", RCTJSONStringify(cookie.path, NULL)]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1225
			 | 
			
			
				+        } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1226
			 | 
			
			
				+        if (cookie.expiresDate) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1227
			 | 
			
			
				+          [script appendFormat:@" + '; Expires=' + new Date(%f).toUTCString()", 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1228
			 | 
			
			
				+            cookie.expiresDate.timeIntervalSince1970 * 1000 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1229
			 | 
			
			
				+          ]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1230
			 | 
			
			
				+        } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1231
			 | 
			
			
				+        [script appendString:@";\n"]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1232
			 | 
			
			
				+      } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1233
			 | 
			
			
				+      [script appendString:@"})();\n"]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1234
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1235
			 | 
			
			
				+      WKUserScript* cookieInScript = [[WKUserScript alloc] initWithSource:script 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1236
			 | 
			
			
				+                                                            injectionTime:WKUserScriptInjectionTimeAtDocumentStart 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1237
			 | 
			
			
				+                                                         forMainFrameOnly:YES]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1238
			 | 
			
			
				+      [wkWebViewConfig.userContentController addUserScript:cookieInScript]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1239
			 | 
			
			
				+    } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1240
			 | 
			
			
				+  } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1241
			 | 
			
			
				+   
			 | 
		
	
		
			
			| 
				
			 | 
			
				1242
			 | 
			
			
				+  if(_messagingEnabled){ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1243
			 | 
			
			
				+    if (self.postMessageScript){ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1244
			 | 
			
			
				+      [wkWebViewConfig.userContentController addScriptMessageHandler:[[RNCWeakScriptMessageDelegate alloc] initWithDelegate:self] 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1245
			 | 
			
			
				+                                                                       name:MessageHandlerName]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1246
			 | 
			
			
				+      [wkWebViewConfig.userContentController addUserScript:self.postMessageScript]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1247
			 | 
			
			
				+    } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1248
			 | 
			
			
				+    // FIXME: For a separate (minor) PR: these two shouldn't be gated by messagingEnabled; just keeping consistency with previous behaviour. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1249
			 | 
			
			
				+    if (self.atStartScript) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1250
			 | 
			
			
				+      [wkWebViewConfig.userContentController addUserScript:self.atStartScript]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1251
			 | 
			
			
				+    } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1252
			 | 
			
			
				+    if (self.atEndScript) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1253
			 | 
			
			
				+      [wkWebViewConfig.userContentController addUserScript:self.atEndScript]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1254
			 | 
			
			
				+    } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1255
			 | 
			
			
				+  } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1256
			 | 
			
			
				+} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1257
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				1197
			 | 
			
				1258
			 | 
			
			
				 - (NSURLRequest *)requestForSource:(id)json { 
			 | 
		
	
		
			
			| 
				1198
			 | 
			
				1259
			 | 
			
			
				   NSURLRequest *request = [RCTConvert NSURLRequest:self.source]; 
			 | 
		
	
		
			
			| 
				1199
			 | 
			
				1260
			 | 
			
			
				  
			 |