diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java index 56a0586..37a4ece 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java @@ -392,6 +392,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); @@ -733,6 +738,9 @@ public class RNCWebViewManager extends SimpleViewManager { super.onPageStarted(webView, url, favicon); mLastLoadFailed = false; + RNCWebView reactWebView = (RNCWebView) webView; + reactWebView.callInjectedJavaScriptBeforeContentLoaded(); + dispatchEvent( webView, new TopLoadingStartEvent( @@ -971,6 +979,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 RNCWebViewClient mRNCWebViewClient; @@ -1044,6 +1054,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); } @@ -1082,9 +1096,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) { if (mRNCWebViewClient != null) { WebView webView = this;