|  | @@ -9,6 +9,7 @@ import java.util.regex.Pattern;
 | 
	
		
			
			| 9 | 9 |  import javax.annotation.Nullable;
 | 
	
		
			
			| 10 | 10 |  
 | 
	
		
			
			| 11 | 11 |  import java.io.UnsupportedEncodingException;
 | 
	
		
			
			|  | 12 | +import java.net.URLEncoder;
 | 
	
		
			
			| 12 | 13 |  import java.util.ArrayList;
 | 
	
		
			
			| 13 | 14 |  import java.util.HashMap;
 | 
	
		
			
			| 14 | 15 |  import java.util.Locale;
 | 
	
	
		
			
			|  | @@ -318,11 +319,25 @@ public class RCTWebViewManager extends SimpleViewManager<WebView> {
 | 
	
		
			
			| 318 | 319 |        }
 | 
	
		
			
			| 319 | 320 |      }
 | 
	
		
			
			| 320 | 321 |  
 | 
	
		
			
			|  | 322 | +    protected void evaluateJavascriptWithFallback(String script) {
 | 
	
		
			
			|  | 323 | +      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
 | 
	
		
			
			|  | 324 | +        evaluateJavascript(script, null);
 | 
	
		
			
			|  | 325 | +        return;
 | 
	
		
			
			|  | 326 | +      }
 | 
	
		
			
			|  | 327 | +
 | 
	
		
			
			|  | 328 | +      try {
 | 
	
		
			
			|  | 329 | +        loadUrl("javascript:" + URLEncoder.encode(script, "UTF-8"));
 | 
	
		
			
			|  | 330 | +      } catch (UnsupportedEncodingException e) {
 | 
	
		
			
			|  | 331 | +        // UTF-8 should always be supported
 | 
	
		
			
			|  | 332 | +        throw new RuntimeException(e);
 | 
	
		
			
			|  | 333 | +      }
 | 
	
		
			
			|  | 334 | +    }
 | 
	
		
			
			|  | 335 | +
 | 
	
		
			
			| 321 | 336 |      public void callInjectedJavaScript() {
 | 
	
		
			
			| 322 | 337 |        if (getSettings().getJavaScriptEnabled() &&
 | 
	
		
			
			| 323 | 338 |            injectedJS != null &&
 | 
	
		
			
			| 324 | 339 |            !TextUtils.isEmpty(injectedJS)) {
 | 
	
		
			
			| 325 |  | -        loadUrl("javascript:(function() {\n" + injectedJS + ";\n})();");
 | 
	
		
			
			|  | 340 | +        evaluateJavascriptWithFallback("(function() {\n" + injectedJS + ";\n})();");
 | 
	
		
			
			| 326 | 341 |        }
 | 
	
		
			
			| 327 | 342 |      }
 | 
	
		
			
			| 328 | 343 |  
 | 
	
	
		
			
			|  | @@ -341,7 +356,7 @@ public class RCTWebViewManager extends SimpleViewManager<WebView> {
 | 
	
		
			
			| 341 | 356 |            });
 | 
	
		
			
			| 342 | 357 |          }
 | 
	
		
			
			| 343 | 358 |  
 | 
	
		
			
			| 344 |  | -        loadUrl("javascript:(" +
 | 
	
		
			
			|  | 359 | +        evaluateJavascriptWithFallback("(" +
 | 
	
		
			
			| 345 | 360 |            "window.originalPostMessage = window.postMessage," +
 | 
	
		
			
			| 346 | 361 |            "window.postMessage = function(data) {" +
 | 
	
		
			
			| 347 | 362 |              BRIDGE_NAME + ".postMessage(String(data));" +
 | 
	
	
		
			
			|  | @@ -630,9 +645,10 @@ public class RCTWebViewManager extends SimpleViewManager<WebView> {
 | 
	
		
			
			| 630 | 645 |          break;
 | 
	
		
			
			| 631 | 646 |        case COMMAND_POST_MESSAGE:
 | 
	
		
			
			| 632 | 647 |          try {
 | 
	
		
			
			|  | 648 | +          ReactWebView reactWebView = (ReactWebView) root;
 | 
	
		
			
			| 633 | 649 |            JSONObject eventInitDict = new JSONObject();
 | 
	
		
			
			| 634 | 650 |            eventInitDict.put("data", args.getString(0));
 | 
	
		
			
			| 635 |  | -          root.loadUrl("javascript:(function () {" +
 | 
	
		
			
			|  | 651 | +          reactWebView.evaluateJavascriptWithFallback("(function () {" +
 | 
	
		
			
			| 636 | 652 |              "var event;" +
 | 
	
		
			
			| 637 | 653 |              "var data = " + eventInitDict.toString() + ";" +
 | 
	
		
			
			| 638 | 654 |              "try {" +
 | 
	
	
		
			
			|  | @@ -648,7 +664,8 @@ public class RCTWebViewManager extends SimpleViewManager<WebView> {
 | 
	
		
			
			| 648 | 664 |          }
 | 
	
		
			
			| 649 | 665 |          break;
 | 
	
		
			
			| 650 | 666 |        case COMMAND_INJECT_JAVASCRIPT:
 | 
	
		
			
			| 651 |  | -        root.loadUrl("javascript:" + args.getString(0));
 | 
	
		
			
			|  | 667 | +        ReactWebView reactWebView = (ReactWebView) root;
 | 
	
		
			
			|  | 668 | +        reactWebView.evaluateJavascriptWithFallback(args.getString(0));
 | 
	
		
			
			| 652 | 669 |          break;
 | 
	
		
			
			| 653 | 670 |      }
 | 
	
		
			
			| 654 | 671 |    }
 |