73 lines
1.6 KiB
Mathematica
73 lines
1.6 KiB
Mathematica
|
#import "RCTWKWebView.h"
|
||
|
|
||
|
#import <WebKit/WebKit.h>
|
||
|
|
||
|
#import <React/RCTConvert.h>
|
||
|
|
||
|
#import "RCTAutoInsetsProtocol.h"
|
||
|
|
||
|
@interface RCTWKWebView () <WKUIDelegate>
|
||
|
@end
|
||
|
|
||
|
@implementation RCTWKWebView
|
||
|
{
|
||
|
WKWebView *_webView;
|
||
|
}
|
||
|
|
||
|
- (void)dealloc
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
- (instancetype)initWithFrame:(CGRect)frame
|
||
|
{
|
||
|
if ((self = [super initWithFrame:frame])) {
|
||
|
super.backgroundColor = [UIColor clearColor];
|
||
|
_webView = [[WKWebView alloc] initWithFrame:self.bounds];
|
||
|
_webView.UIDelegate = self;
|
||
|
[self addSubview:_webView];
|
||
|
}
|
||
|
return self;
|
||
|
}
|
||
|
|
||
|
- (void)setSource:(NSDictionary *)source
|
||
|
{
|
||
|
if (![_source isEqualToDictionary:source]) {
|
||
|
_source = [source copy];
|
||
|
|
||
|
// Check for a static html source first
|
||
|
NSString *html = [RCTConvert NSString:source[@"html"]];
|
||
|
if (html) {
|
||
|
NSURL *baseURL = [RCTConvert NSURL:source[@"baseUrl"]];
|
||
|
if (!baseURL) {
|
||
|
baseURL = [NSURL URLWithString:@"about:blank"];
|
||
|
}
|
||
|
[_webView loadHTMLString:html baseURL:baseURL];
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
NSURLRequest *request = [RCTConvert NSURLRequest:source];
|
||
|
// Because of the way React works, as pages redirect, we actually end up
|
||
|
// passing the redirect urls back here, so we ignore them if trying to load
|
||
|
// the same url. We'll expose a call to 'reload' to allow a user to load
|
||
|
// the existing page.
|
||
|
if ([request.URL isEqual:_webView.URL]) {
|
||
|
return;
|
||
|
}
|
||
|
if (!request.URL) {
|
||
|
// Clear the webview
|
||
|
[_webView loadHTMLString:@"" baseURL:nil];
|
||
|
return;
|
||
|
}
|
||
|
[_webView loadRequest:request];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
- (void)layoutSubviews
|
||
|
{
|
||
|
[super layoutSubviews];
|
||
|
_webView.frame = self.bounds;
|
||
|
}
|
||
|
|
||
|
@end
|