Commit 787c4a5
webview: Encode input messages in base64.
Fixes #2505, #2538, #2558.
When using `postMessage` to communicate with the WebView, depending
on the content of the message we send, an exception might be thrown.
A minimal but reliable way to reproduce the issue is to send the
string `'%22'`. Other character combinations might also cause issues.
To work around the issue, we encode our data in the nice boring
characters of base64 so that it doesn't get reinterpreted.
---
More details on how React Native sends messages to the WebView:
The logic is different on iOS vs. Android. This explains why the
issue this is fixing is Android-specific.
On iOS, a custom navigation scheme is used to pass the data into the
webview; search the RN source for `RCTJSNavigationScheme`, and see the
implementation of `webViewDidFinishLoad` in `RTCWebView.m`.
The Android messaging happens in `receiveCommand` in
`ReactWebViewManager.java`, by navigating to a URL of the form
`javascript:(.....)`, which is a standard way of injecting JavaScript
into web pages.
The issue comes from the fact that since Android 4.4, `loadUrl` does
a URL decode on the string passed to it:
https://issuetracker.google.com/issues/36995865
See #2854 for links to upstream RN bug reports and PRs.
[greg: lightly revised commit message; found better reference for the
`loadUrl` issue]1 parent e93ff11 commit 787c4a5
3 files changed
+6
-3
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
13 | 14 | | |
14 | 15 | | |
15 | 16 | | |
| |||
29 | 30 | | |
30 | 31 | | |
31 | 32 | | |
32 | | - | |
| 33 | + | |
33 | 34 | | |
34 | 35 | | |
35 | 36 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
241 | 241 | | |
242 | 242 | | |
243 | 243 | | |
244 | | - | |
| 244 | + | |
| 245 | + | |
245 | 246 | | |
246 | 247 | | |
247 | 248 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
261 | 261 | | |
262 | 262 | | |
263 | 263 | | |
264 | | - | |
| 264 | + | |
| 265 | + | |
265 | 266 | | |
266 | 267 | | |
267 | 268 | | |
| |||
0 commit comments