# JavaScriptReplyProxy

Artifact: [androidx.webkit:webkit](https://developer.android.com/jetpack/androidx/releases/webkit) [View Source](https://cs.android.com/search?q=file:androidx/webkit/JavaScriptReplyProxy.java+class:androidx.webkit.JavaScriptReplyProxy) Added in [1.3.0](https://developer.android.com/jetpack/androidx/releases/webkit#1.3.0)

*** ** * ** ***


```
@UiThread
public abstract class JavaScriptReplyProxy
```

<br />

*** ** * ** ***

This class represents the JavaScript object injected by `https://developer.android.com/reference/androidx/webkit/WebViewCompat#addWebMessageListener(android.webkit.WebView,java.lang.String,java.util.Set<java.lang.String>,androidx.webkit.WebViewCompat.WebMessageListener)`. An instance will be given by `https://developer.android.com/reference/androidx/webkit/WebViewCompat.WebMessageListener#onPostMessage(android.webkit.WebView,androidx.webkit.WebMessageCompat,android.net.Uri,boolean,androidx.webkit.JavaScriptReplyProxy)`. The app can use `https://developer.android.com/reference/androidx/webkit/JavaScriptReplyProxy#postMessage(java.lang.String)` to talk to the JavaScript context.

There is a 1:1 relationship between this object and the JavaScript object in a frame.

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/webkit/WebViewCompat#addWebMessageListener(android.webkit.WebView,java.lang.String,java.util.Set<java.lang.String>,androidx.webkit.WebViewCompat.WebMessageListener)` |   |

## Summary

| ### Public methods |
|---|---|
| `abstract void` | `@https://developer.android.com/reference/androidx/annotation/RequiresFeature(name = https://developer.android.com/reference/androidx/webkit/WebViewFeature.JS_INJECTION_IN_FRAME_AND_WORLD, enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported") https://developer.android.com/reference/androidx/webkit/JavaScriptReplyProxy#executeJavaScript(java.lang.String,androidx.webkit.WebViewOutcomeReceiver<java.lang.String,androidx.webkit.JavaScriptExecutionException>)( @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/String.html script, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/webkit/WebViewOutcomeReceiver<https://developer.android.com/reference/java/lang/String.html, https://developer.android.com/reference/androidx/webkit/JavaScriptExecutionException> receiver )` Executes JavaScript in the frame and world that sent this `https://developer.android.com/reference/androidx/webkit/JavaScriptReplyProxy`. |
| `abstract void` | `@https://developer.android.com/reference/androidx/annotation/RequiresFeature(name = https://developer.android.com/reference/androidx/webkit/WebViewFeature.WEB_MESSAGE_ARRAY_BUFFER, enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported") https://developer.android.com/reference/androidx/webkit/JavaScriptReplyProxy#postMessage(byte[])(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html byte[] arrayBuffer)` Post a ArrayBuffer message to the injected JavaScript object which sent this `https://developer.android.com/reference/androidx/webkit/JavaScriptReplyProxy`. |
| `abstract void` | `@https://developer.android.com/reference/androidx/annotation/RequiresFeature(name = https://developer.android.com/reference/androidx/webkit/WebViewFeature.WEB_MESSAGE_LISTENER, enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported") https://developer.android.com/reference/androidx/webkit/JavaScriptReplyProxy#postMessage(java.lang.String)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/String.html message)` Post a String message to the injected JavaScript object which sent this `https://developer.android.com/reference/androidx/webkit/JavaScriptReplyProxy`. |

## Public methods

### executeJavaScript

Added in [1.16.0](https://developer.android.com/jetpack/androidx/releases/webkit#1.16.0)

```
@RequiresFeature(name = WebViewFeature.JS_INJECTION_IN_FRAME_AND_WORLD, enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
public abstract void executeJavaScript(
    @NonNull String script,
    @Nullable WebViewOutcomeReceiver<String, JavaScriptExecutionException> receiver
)
```

Executes JavaScript in the frame and world that sent this `https://developer.android.com/reference/androidx/webkit/JavaScriptReplyProxy`. The result of the JavaScript execution will be passed to the `https://developer.android.com/reference/androidx/webkit/WebViewOutcomeReceiver` callback.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/webkit/WebViewOutcomeReceiver<https://developer.android.com/reference/java/lang/String.html, https://developer.android.com/reference/androidx/webkit/JavaScriptExecutionException> receiver` | The `https://developer.android.com/reference/androidx/webkit/WebViewOutcomeReceiver` to receive the result of the JavaScript execution. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/String.html script` | The JavaScript to execute. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException.html` | if the `https://developer.android.com/reference/androidx/webkit/WebViewFeature#JS_INJECTION_IN_FRAME_AND_WORLD()` feature is not supported. This should be checked before use with `https://developer.android.com/reference/androidx/webkit/WebViewFeature#isFeatureSupported(java.lang.String)`. |

### postMessage

Added in [1.8.0](https://developer.android.com/jetpack/androidx/releases/webkit#1.8.0)

```
@RequiresFeature(name = WebViewFeature.WEB_MESSAGE_ARRAY_BUFFER, enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
public abstract void postMessage(@NonNull byte[] arrayBuffer)
```

Post a ArrayBuffer message to the injected JavaScript object which sent this `https://developer.android.com/reference/androidx/webkit/JavaScriptReplyProxy`. Be aware that large byte buffers can lead to out-of-memory crashes on low-end devices.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html byte[] arrayBuffer` | The ArrayBuffer to send to the JavaScript context. An empty ArrayBuffer is supported. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException.html` | if the `https://developer.android.com/reference/androidx/webkit/WebViewFeature#WEB_MESSAGE_ARRAY_BUFFER()` feature is not supported. This should be checked before use with `https://developer.android.com/reference/androidx/webkit/WebViewFeature#isFeatureSupported(java.lang.String)`. |

### postMessage

Added in [1.3.0](https://developer.android.com/jetpack/androidx/releases/webkit#1.3.0)

```
@RequiresFeature(name = WebViewFeature.WEB_MESSAGE_LISTENER, enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
public abstract void postMessage(@NonNull String message)
```

Post a String message to the injected JavaScript object which sent this `https://developer.android.com/reference/androidx/webkit/JavaScriptReplyProxy`.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/String.html message` | The String data to send to the JavaScript context. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException.html` | if the `https://developer.android.com/reference/androidx/webkit/WebViewFeature#WEB_MESSAGE_LISTENER()` feature is not supported. This should be checked before use with `https://developer.android.com/reference/androidx/webkit/WebViewFeature#isFeatureSupported(java.lang.String)`. |