From 5f2f37eecd0f4d5ac657306c4e4cf492962424e0 Mon Sep 17 00:00:00 2001 From: Vitaliy Vlasov Date: Tue, 11 Feb 2020 15:06:06 +0200 Subject: [PATCH] Add Android support for beforeContentLoaded --- .../webview/RNCWebViewManager.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java index 1995d87..bd0fea0 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java @@ -396,6 +396,11 @@ public class RNCWebViewManager extends SimpleViewManager { ((RNCWebView) view).setInjectedJavaScript(injectedJavaScript); } + @ReactProp(name = "injectedJavaScriptBeforeContentLoaded") + public void setInjectedJavaScriptBeforeContentLoaded(WebView view, @Nullable String injectedJavaScriptBeforeContentLoaded) { + ((RNCWebView) view).setInjectedJavaScriptBeforeContentLoaded(injectedJavaScriptBeforeContentLoaded); + } + @ReactProp(name = "messagingEnabled") public void setMessagingEnabled(WebView view, boolean enabled) { ((RNCWebView) view).setMessagingEnabled(enabled); @@ -747,6 +752,9 @@ public class RNCWebViewManager extends SimpleViewManager { super.onPageStarted(webView, url, favicon); mLastLoadFailed = false; + RNCWebView reactWebView = (RNCWebView) webView; + reactWebView.callInjectedJavaScriptBeforeContentLoaded(); + dispatchEvent( webView, new TopLoadingStartEvent( @@ -1000,6 +1008,8 @@ public class RNCWebViewManager extends SimpleViewManager { protected static class RNCWebView extends WebView implements LifecycleEventListener { protected @Nullable String injectedJS; + protected @Nullable + String injectedJSBeforeContentLoaded; protected boolean messagingEnabled = false; protected @Nullable String messagingModuleName; @@ -1081,6 +1091,10 @@ public class RNCWebViewManager extends SimpleViewManager { injectedJS = js; } + public void setInjectedJavaScriptBeforeContentLoaded(@Nullable String js) { + injectedJSBeforeContentLoaded = js; + } + protected RNCWebViewBridge createRNCWebViewBridge(RNCWebView webView) { return new RNCWebViewBridge(webView); } @@ -1132,9 +1146,19 @@ public class RNCWebViewManager extends SimpleViewManager { injectedJS != null && !TextUtils.isEmpty(injectedJS)) { evaluateJavascriptWithFallback("(function() {\n" + injectedJS + ";\n})();"); + //evaluateJavascriptWithFallback(injectedJS); } } + public void callInjectedJavaScriptBeforeContentLoaded() { + if (getSettings().getJavaScriptEnabled() && + injectedJSBeforeContentLoaded != null && + !TextUtils.isEmpty(injectedJSBeforeContentLoaded)) { + evaluateJavascriptWithFallback("(function() {\n" + injectedJSBeforeContentLoaded + ";\n})();"); + //evaluateJavascriptWithFallback(injectedJSBeforeContentLoaded); + } + } + public void onMessage(String message) { ReactContext reactContext = (ReactContext) this.getContext(); RNCWebView mContext = this;