From c439445ca5b6aa90e2c3473abd62b2d59319f665 Mon Sep 17 00:00:00 2001 From: Jimmy Mayoukou Date: Thu, 17 Mar 2016 16:20:27 +0100 Subject: [PATCH] Add support for Android 1+ --- .../WebViewBridgeManager.java | 51 +++++++++++-------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/android/src/main/java/com/github/alinz/reactnativewebviewbridge/WebViewBridgeManager.java b/android/src/main/java/com/github/alinz/reactnativewebviewbridge/WebViewBridgeManager.java index fc6346a..2a4112e 100644 --- a/android/src/main/java/com/github/alinz/reactnativewebviewbridge/WebViewBridgeManager.java +++ b/android/src/main/java/com/github/alinz/reactnativewebviewbridge/WebViewBridgeManager.java @@ -1,16 +1,15 @@ package com.github.alinz.reactnativewebviewbridge; -import javax.annotation.Nullable; -import java.util.Map; - import android.webkit.WebView; +import com.facebook.react.bridge.ReactContext; +import com.facebook.react.bridge.ReadableArray; import com.facebook.react.views.webview.ReactWebViewManager; import com.facebook.react.views.webview.WebViewConfig; -import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReactContext; -import com.facebook.react.bridge.WritableMap; -import com.facebook.react.common.MapBuilder; + +import java.util.Map; + +import javax.annotation.Nullable; public class WebViewBridgeManager extends ReactWebViewManager { private static final String REACT_CLASS = "RCTWebViewBridge"; @@ -64,29 +63,37 @@ public class WebViewBridgeManager extends ReactWebViewManager { private void sendToBridge(WebView root, String message) { //root.loadUrl("javascript:(function() {\n" + script + ";\n})();"); String script = "WebViewBridge.onMessage('" + message + "');"; - root.evaluateJavascript(script, null); + WebViewBridgeManager.evaluateJavascript(root, script); } private void injectBridgeScript(WebView root) { //this code needs to be called once per context if (!initializedBridge) { - root.addJavascriptInterface(new JavascriptBridge((ReactContext)root.getContext()), "WebViewBridgeAndroid"); + root.addJavascriptInterface(new JavascriptBridge((ReactContext) root.getContext()), "WebViewBridgeAndroid"); initializedBridge = true; root.reload(); } - //this code needs to be executed everytime a url changes. - root.evaluateJavascript("" - + "(function() {" - + "if (window.WebViewBridge) return;" - + "var customEvent = document.createEvent('Event');" - + "var WebViewBridge = {" - + "send: function(message) { WebViewBridgeAndroid.send(message); }," - + "onMessage: function() {}" - + "};" - + "window.WebViewBridge = WebViewBridge;" - + "customEvent.initEvent('WebViewBridge', true, true);" - + "document.dispatchEvent(customEvent);" - +"}());", null); + // this code needs to be executed everytime a url changes. + WebViewBridgeManager.evaluateJavascript(root, "" + + "(function() {" + + "if (window.WebViewBridge) return;" + + "var customEvent = document.createEvent('Event');" + + "var WebViewBridge = {" + + "send: function(message) { WebViewBridgeAndroid.send(message); }," + + "onMessage: function() {}" + + "};" + + "window.WebViewBridge = WebViewBridge;" + + "customEvent.initEvent('WebViewBridge', true, true);" + + "document.dispatchEvent(customEvent);" + + "}());"); + } + + static private void evaluateJavascript(WebView root, String javascript) { + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { + root.evaluateJavascript(javascript, null); + } else { + root.loadUrl("javascript:" + javascript); + } } }