@@ -10,6 +10,8 @@ @interface AQWebView () <RCTAutoInsetsProtocol, WKNavigationDelegate>
1010@property (nonatomic , copy ) RCTDirectEventBlock onLoadingStart;
1111@property (nonatomic , copy ) RCTDirectEventBlock onLoadingFinish;
1212@property (nonatomic , copy ) RCTDirectEventBlock onLoadingError;
13+ @property (nonatomic , copy ) RCTDirectEventBlock onPrefixBlocked;
14+
1315@end
1416
1517@implementation AQWebView
@@ -147,6 +149,35 @@ - (void)refreshContentInset
147149
148150#pragma mark - WKNavigationDelegate
149151
152+ - (void )webView : (WKWebView *)webView decidePolicyForNavigationAction : (WKNavigationAction *)navigationAction decisionHandler : (void (^)(WKNavigationActionPolicy ))decisionHandler
153+ {
154+ NSURL *url = navigationAction.request .URL ;
155+ NSString *urlStr = [url absoluteString ];
156+ BOOL block = false ;
157+
158+ if ([urlStr isEqual: @" " ]) {
159+ urlStr = @" about:blank" ;
160+ }
161+
162+ for (id prefix in _blockedPrefixes) {
163+ if ([urlStr hasPrefix: prefix]) {
164+ NSMutableDictionary <NSString *, id > *event = [[NSMutableDictionary alloc ] initWithDictionary:
165+ @{
166+ @" url" : urlStr,
167+ }
168+ ];
169+ _onPrefixBlocked (event);
170+ decisionHandler (WKNavigationActionPolicyCancel );
171+ block = true ;
172+ break ;
173+ }
174+ }
175+
176+ if (!block) {
177+ decisionHandler (WKNavigationActionPolicyAllow );
178+ }
179+ }
180+
150181-(void )webView : (WKWebView *)webView didFinishNavigation : (WKNavigation *)navigation
151182{
152183 [_spinner stopAnimating ];
0 commit comments