Skip to content

Commit c02c8f4

Browse files
authored
Merge pull request #4 from phantom/kuba/origin-fixes-alternative
feat: implement passing isMainFrame with on message callbacks
2 parents 733aef3 + 17a37dc commit c02c8f4

File tree

5 files changed

+20
-1
lines changed

5 files changed

+20
-1
lines changed

.changeset/spotty-feet-shave.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@phantom/react-native-webview': patch
3+
---
4+
5+
added isMainFrame to onMessage callbacks

android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ protected void createRNCWebViewBridge(RNCWebView webView) {
257257
this.bridgeListener = new WebViewCompat.WebMessageListener() {
258258
@Override
259259
public void onPostMessage(@NonNull WebView view, @NonNull WebMessageCompat message, @NonNull Uri sourceOrigin, boolean isMainFrame, @NonNull JavaScriptReplyProxy replyProxy) {
260-
RNCWebView.this.onMessage(message.getData(), sourceOrigin.toString());
260+
RNCWebView.this.onMessage(message.getData(), sourceOrigin.toString(), isMainFrame);
261261
}
262262
};
263263
WebViewCompat.addWebMessageListener(
@@ -339,6 +339,10 @@ public void setInjectedJavaScriptObject(String obj) {
339339
}
340340

341341
public void onMessage(String message, String sourceUrl) {
342+
onMessage(message, sourceUrl, null);
343+
}
344+
345+
public void onMessage(String message, String sourceUrl, @Nullable Boolean isMainFrame) {
342346
ThemedReactContext reactContext = getThemedReactContext();
343347
RNCWebView mWebView = this;
344348

@@ -352,6 +356,9 @@ public void run() {
352356
}
353357
WritableMap data = mRNCWebViewClient.createWebViewEvent(webView, sourceUrl);
354358
data.putString("data", message);
359+
if (isMainFrame != null) {
360+
data.putBoolean("isMainFrame", isMainFrame);
361+
}
355362

356363
if (mMessagingJSModule != null) {
357364
dispatchDirectMessage(data);
@@ -363,6 +370,9 @@ public void run() {
363370
} else {
364371
WritableMap eventData = Arguments.createMap();
365372
eventData.putString("data", message);
373+
if (isMainFrame != null) {
374+
eventData.putBoolean("isMainFrame", isMainFrame);
375+
}
366376

367377
if (mMessagingJSModule != null) {
368378
dispatchDirectMessage(eventData);

apple/RNCWebViewImpl.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -773,10 +773,12 @@ - (void)userContentController:(WKUserContentController *)userContentController
773773
_onLoadingFinish(event);
774774
}
775775
} else if ([message.name isEqualToString:MessageHandlerName]) {
776+
BOOL isMainFrame = message.frameInfo.isMainFrame;
776777
if (_onMessage) {
777778
NSMutableDictionary<NSString *, id> *event = [self baseEvent];
778779
[event addEntriesFromDictionary: @{@"data": message.body}];
779780
[event addEntriesFromDictionary: @{@"url": message.frameInfo.request.URL.absoluteString}];
781+
[event addEntriesFromDictionary: @{@"isMainFrame": @(isMainFrame)}];
780782
_onMessage(event);
781783
}
782784
}

src/RNCWebViewNativeComponent.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export type WebViewMessageEvent = Readonly<{
2929
canGoForward: boolean;
3030
lockIdentifier: Double;
3131
data: string;
32+
isMainFrame?: boolean;
3233
}>;
3334
export type WebViewOpenWindowEvent = Readonly<{
3435
targetUrl: string;

src/WebViewTypes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ export type DecelerationRateConstant = 'normal' | 'fast';
110110

111111
export interface WebViewMessage extends WebViewNativeEvent {
112112
data: string;
113+
isMainFrame?: boolean;
113114
}
114115

115116
export interface WebViewError extends WebViewNativeEvent {

0 commit comments

Comments
 (0)