diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java index a2412668e..90cd77e57 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java @@ -110,6 +110,7 @@ public class RNCWebViewManager extends SimpleViewManager { public static final int COMMAND_POST_MESSAGE = 5; public static final int COMMAND_INJECT_JAVASCRIPT = 6; public static final int COMMAND_LOAD_URL = 7; + public static final int COMMAND_FOCUS = 8; protected static final String REACT_CLASS = "RNCWebView"; protected static final String HTML_ENCODING = "UTF-8"; protected static final String HTML_MIME_TYPE = "text/html"; @@ -511,7 +512,7 @@ public Map getExportedCustomDirectEventTypeConstants() { @Override public @Nullable Map getCommandsMap() { - return MapBuilder.of( + Map map = MapBuilder.of( "goBack", COMMAND_GO_BACK, "goForward", COMMAND_GO_FORWARD, "reload", COMMAND_RELOAD, @@ -520,6 +521,8 @@ Map getCommandsMap() { "injectJavaScript", COMMAND_INJECT_JAVASCRIPT, "loadUrl", COMMAND_LOAD_URL ); + map.put("requestFocus", COMMAND_FOCUS); + return map; } @Override @@ -567,6 +570,9 @@ public void receiveCommand(WebView root, int commandId, @Nullable ReadableArray } root.loadUrl(args.getString(0)); break; + case COMMAND_FOCUS: + root.requestFocus(); + break; } } diff --git a/index.d.ts b/index.d.ts index c895da5df..2c9606c6f 100644 --- a/index.d.ts +++ b/index.d.ts @@ -34,6 +34,11 @@ declare class WebView extends Component { * Executes the JavaScript string. */ injectJavaScript: (script: string) => void; + + /** + * Focuses on WebView redered page. + */ + requestFocus: () => void; } export {WebView}; diff --git a/src/WebView.android.tsx b/src/WebView.android.tsx index abf77fe6e..4196063ec 100644 --- a/src/WebView.android.tsx +++ b/src/WebView.android.tsx @@ -105,6 +105,14 @@ class WebView extends React.Component { ); }; + requestFocus = () => { + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + this.getCommands().requestFocus, + null, + ); + }; + postMessage = (data: string) => { UIManager.dispatchViewManagerCommand( this.getWebViewHandle(), diff --git a/src/WebView.ios.tsx b/src/WebView.ios.tsx index 550f5c3cc..2cc3e3dc2 100644 --- a/src/WebView.ios.tsx +++ b/src/WebView.ios.tsx @@ -164,6 +164,17 @@ class WebView extends React.Component { ); }; + /** + * Request focus on WebView rendered page. + */ + requestFocus = () => { + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + this.getCommands().requestFocus, + null, + ); + }; + /** * Posts a message to the web view, which will emit a `message` event. * Accepts one argument, `data`, which must be a string. diff --git a/src/WebViewTypes.ts b/src/WebViewTypes.ts index 4729a1638..4bbda15a2 100644 --- a/src/WebViewTypes.ts +++ b/src/WebViewTypes.ts @@ -18,6 +18,7 @@ export interface WebViewCommands { postMessage: Function; injectJavaScript: Function; loadUrl: Function; + requestFocus: Function; } export interface CustomUIManager extends UIManagerStatic {