fix(iOS): WKWebView RetainCycle (#1096)
This commit is contained in:
parent
7ba1bc5129
commit
4f4644ffd8
|
@ -19,6 +19,11 @@
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@interface RNCWeakScriptMessageDelegate : NSObject<WKScriptMessageHandler>
|
||||||
|
@property (nonatomic, weak) id<WKScriptMessageHandler> scriptDelegate;
|
||||||
|
- (instancetype)initWithDelegate:(id<WKScriptMessageHandler>)scriptDelegate;
|
||||||
|
@end
|
||||||
|
|
||||||
@interface RNCWebView : RCTView
|
@interface RNCWebView : RCTView
|
||||||
|
|
||||||
@property (nonatomic, weak) id<RNCWebViewDelegate> _Nullable delegate;
|
@property (nonatomic, weak) id<RNCWebViewDelegate> _Nullable delegate;
|
||||||
|
|
|
@ -162,7 +162,8 @@ static NSDictionary* customCertificatesForHost;
|
||||||
wkWebViewConfig.userContentController = [WKUserContentController new];
|
wkWebViewConfig.userContentController = [WKUserContentController new];
|
||||||
|
|
||||||
// Shim the HTML5 history API:
|
// Shim the HTML5 history API:
|
||||||
[wkWebViewConfig.userContentController addScriptMessageHandler:self name:HistoryShimName];
|
[wkWebViewConfig.userContentController addScriptMessageHandler:[[RNCWeakScriptMessageDelegate alloc] initWithDelegate:self]
|
||||||
|
name:HistoryShimName];
|
||||||
NSString *source = [NSString stringWithFormat:
|
NSString *source = [NSString stringWithFormat:
|
||||||
@"(function(history) {\n"
|
@"(function(history) {\n"
|
||||||
" function notify(type) {\n"
|
" function notify(type) {\n"
|
||||||
|
@ -187,7 +188,8 @@ static NSDictionary* customCertificatesForHost;
|
||||||
[wkWebViewConfig.userContentController addUserScript:script];
|
[wkWebViewConfig.userContentController addUserScript:script];
|
||||||
|
|
||||||
if (_messagingEnabled) {
|
if (_messagingEnabled) {
|
||||||
[wkWebViewConfig.userContentController addScriptMessageHandler:self name:MessageHandlerName];
|
[wkWebViewConfig.userContentController addScriptMessageHandler:[[RNCWeakScriptMessageDelegate alloc] initWithDelegate:self]
|
||||||
|
name:MessageHandlerName];
|
||||||
|
|
||||||
NSString *source = [NSString stringWithFormat:
|
NSString *source = [NSString stringWithFormat:
|
||||||
@"window.%@ = {"
|
@"window.%@ = {"
|
||||||
|
@ -1077,3 +1079,20 @@ static NSDictionary* customCertificatesForHost;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@implementation RNCWeakScriptMessageDelegate
|
||||||
|
|
||||||
|
- (instancetype)initWithDelegate:(id<WKScriptMessageHandler>)scriptDelegate {
|
||||||
|
self = [super init];
|
||||||
|
if (self) {
|
||||||
|
_scriptDelegate = scriptDelegate;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
|
||||||
|
[self.scriptDelegate userContentController:userContentController didReceiveScriptMessage:message];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue