Skip to content

Commit 3fe319d

Browse files
authored
Merge pull request #67 from MetaMask/fix/fix_iframe_detection_on_ios
fix: On iOS add additional detection of embedded iFrames
2 parents 4ce0284 + d93893d commit 3fe319d

File tree

2 files changed

+48
-8
lines changed

2 files changed

+48
-8
lines changed

apple/RNCWebViewImpl.m

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1463,6 +1463,16 @@ - (void) webView:(WKWebView *)webView
14631463
@"navigationType": navigationTypes[@(navigationType)]
14641464
}];
14651465
self->_onLoadingStart(event);
1466+
} else {
1467+
// In aditional to IFrameDetector report all navigated iFrames to the app
1468+
NSString *reportIframeUrlsScript = [NSString stringWithFormat:
1469+
@"if (window.ReactNativeWebView && window.ReactNativeWebView.postMessage) {\n"
1470+
@" window.ReactNativeWebView.postMessage(JSON.stringify({\n"
1471+
@" type: 'IFRAME_DETECTED',\n"
1472+
@" iframeUrls: ['%@']\n"
1473+
@"}));\n"
1474+
@"}", urlString];
1475+
[self.webView evaluateJavaScript:reportIframeUrlsScript completionHandler:^(id result, NSError *error) {}];
14661476
}
14671477
}
14681478

ios/RNCWebView.xcodeproj/project.pbxproj

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,13 @@
88

99
/* Begin PBXBuildFile section */
1010
3515965E21A3C86000623BFA /* RNCWKProcessPoolManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3515965D21A3C86000623BFA /* RNCWKProcessPoolManager.m */; };
11-
E91B351D21446E6C00F9801F /* RNCWebViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E91B351B21446E6C00F9801F /* RNCWebViewManager.m */; };
12-
E91B351E21446E6C00F9801F /* RNCWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = E91B351C21446E6C00F9801F /* RNCWebView.m */; };
11+
E91B351D21446E6C00F9801F /* RNCWebViewManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = E91B351B21446E6C00F9801F /* RNCWebViewManager.mm */; };
12+
E91B351E21446E6C00F9801F /* RNCWebView.mm in Sources */ = {isa = PBXBuildFile; fileRef = E91B351C21446E6C00F9801F /* RNCWebView.mm */; };
13+
IFRAME001A21A3C86000623BFA /* IFrameDetector.m in Sources */ = {isa = PBXBuildFile; fileRef = IFRAME0019A3C86000623BFA /* IFrameDetector.m */; };
14+
IMPL001A21A3C86000623BFA /* RNCWebViewImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = IMPL0019A3C86000623BFA /* RNCWebViewImpl.m */; };
15+
CONV001A21A3C86000623BFA /* RCTConvert+WKDataDetectorTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = CONV0019A3C86000623BFA /* RCTConvert+WKDataDetectorTypes.m */; };
16+
DECI001A21A3C86000623BFA /* RNCWebViewDecisionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DECI0019A3C86000623BFA /* RNCWebViewDecisionManager.m */; };
17+
MODU001A21A3C86000623BFA /* RNCWebViewModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = MODU0019A3C86000623BFA /* RNCWebViewModule.mm */; };
1318
/* End PBXBuildFile section */
1419

1520
/* Begin PBXCopyFilesBuildPhase section */
@@ -30,8 +35,18 @@
3035
3515965F21A3C87E00623BFA /* RNCWKProcessPoolManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RNCWKProcessPoolManager.h; path = ../apple/RNCWKProcessPoolManager.h; sourceTree = "<group>"; };
3136
E91B351921446E6C00F9801F /* RNCWebViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RNCWebViewManager.h; path = ../apple/RNCWebViewManager.h; sourceTree = "<group>"; };
3237
E91B351A21446E6C00F9801F /* RNCWebView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RNCWebView.h; path = ../apple/RNCWebView.h; sourceTree = "<group>"; };
33-
E91B351B21446E6C00F9801F /* RNCWebViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RNCWebViewManager.m; path = ../apple/RNCWebViewManager.m; sourceTree = "<group>"; };
34-
E91B351C21446E6C00F9801F /* RNCWebView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RNCWebView.m; path = ../apple/RNCWebView.m; sourceTree = "<group>"; };
38+
E91B351B21446E6C00F9801F /* RNCWebViewManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = RNCWebViewManager.mm; path = ../apple/RNCWebViewManager.mm; sourceTree = "<group>"; };
39+
E91B351C21446E6C00F9801F /* RNCWebView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = RNCWebView.mm; path = ../apple/RNCWebView.mm; sourceTree = "<group>"; };
40+
IFRAME0018A3C86000623BFA /* IFrameDetector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = IFrameDetector.h; path = ../apple/IFrameDetector.h; sourceTree = "<group>"; };
41+
IFRAME0019A3C86000623BFA /* IFrameDetector.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = IFrameDetector.m; path = ../apple/IFrameDetector.m; sourceTree = "<group>"; };
42+
IMPL0018A3C86000623BFA /* RNCWebViewImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RNCWebViewImpl.h; path = ../apple/RNCWebViewImpl.h; sourceTree = "<group>"; };
43+
IMPL0019A3C86000623BFA /* RNCWebViewImpl.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = RNCWebViewImpl.m; path = ../apple/RNCWebViewImpl.m; sourceTree = "<group>"; };
44+
CONV0018A3C86000623BFA /* RCTConvert+WKDataDetectorTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "RCTConvert+WKDataDetectorTypes.h"; path = "../apple/RCTConvert+WKDataDetectorTypes.h"; sourceTree = "<group>"; };
45+
CONV0019A3C86000623BFA /* RCTConvert+WKDataDetectorTypes.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "RCTConvert+WKDataDetectorTypes.m"; path = "../apple/RCTConvert+WKDataDetectorTypes.m"; sourceTree = "<group>"; };
46+
DECI0018A3C86000623BFA /* RNCWebViewDecisionManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RNCWebViewDecisionManager.h; path = ../apple/RNCWebViewDecisionManager.h; sourceTree = "<group>"; };
47+
DECI0019A3C86000623BFA /* RNCWebViewDecisionManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = RNCWebViewDecisionManager.m; path = ../apple/RNCWebViewDecisionManager.m; sourceTree = "<group>"; };
48+
MODU0018A3C86000623BFA /* RNCWebViewModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RNCWebViewModule.h; path = ../apple/RNCWebViewModule.h; sourceTree = "<group>"; };
49+
MODU0019A3C86000623BFA /* RNCWebViewModule.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = RNCWebViewModule.mm; path = ../apple/RNCWebViewModule.mm; sourceTree = "<group>"; };
3550
/* End PBXFileReference section */
3651

3752
/* Begin PBXFrameworksBuildPhase section */
@@ -57,11 +72,21 @@
5772
isa = PBXGroup;
5873
children = (
5974
E91B351A21446E6C00F9801F /* RNCWebView.h */,
60-
E91B351C21446E6C00F9801F /* RNCWebView.m */,
75+
E91B351C21446E6C00F9801F /* RNCWebView.mm */,
6176
E91B351921446E6C00F9801F /* RNCWebViewManager.h */,
62-
E91B351B21446E6C00F9801F /* RNCWebViewManager.m */,
77+
E91B351B21446E6C00F9801F /* RNCWebViewManager.mm */,
78+
IMPL0018A3C86000623BFA /* RNCWebViewImpl.h */,
79+
IMPL0019A3C86000623BFA /* RNCWebViewImpl.m */,
6380
3515965F21A3C87E00623BFA /* RNCWKProcessPoolManager.h */,
6481
3515965D21A3C86000623BFA /* RNCWKProcessPoolManager.m */,
82+
IFRAME0018A3C86000623BFA /* IFrameDetector.h */,
83+
IFRAME0019A3C86000623BFA /* IFrameDetector.m */,
84+
CONV0018A3C86000623BFA /* RCTConvert+WKDataDetectorTypes.h */,
85+
CONV0019A3C86000623BFA /* RCTConvert+WKDataDetectorTypes.m */,
86+
DECI0018A3C86000623BFA /* RNCWebViewDecisionManager.h */,
87+
DECI0019A3C86000623BFA /* RNCWebViewDecisionManager.m */,
88+
MODU0018A3C86000623BFA /* RNCWebViewModule.h */,
89+
MODU0019A3C86000623BFA /* RNCWebViewModule.mm */,
6590
134814211AA4EA7D00B7C361 /* Products */,
6691
);
6792
indentWidth = 2;
@@ -124,9 +149,14 @@
124149
isa = PBXSourcesBuildPhase;
125150
buildActionMask = 2147483647;
126151
files = (
127-
E91B351D21446E6C00F9801F /* RNCWebViewManager.m in Sources */,
128-
E91B351E21446E6C00F9801F /* RNCWebView.m in Sources */,
152+
E91B351D21446E6C00F9801F /* RNCWebViewManager.mm in Sources */,
153+
E91B351E21446E6C00F9801F /* RNCWebView.mm in Sources */,
154+
IMPL001A21A3C86000623BFA /* RNCWebViewImpl.m in Sources */,
129155
3515965E21A3C86000623BFA /* RNCWKProcessPoolManager.m in Sources */,
156+
IFRAME001A21A3C86000623BFA /* IFrameDetector.m in Sources */,
157+
CONV001A21A3C86000623BFA /* RCTConvert+WKDataDetectorTypes.m in Sources */,
158+
DECI001A21A3C86000623BFA /* RNCWebViewDecisionManager.m in Sources */,
159+
MODU001A21A3C86000623BFA /* RNCWebViewModule.mm in Sources */,
130160
);
131161
runOnlyForDeploymentPostprocessing = 0;
132162
};

0 commit comments

Comments
 (0)