81 lines
3.0 KiB
Objective-C
81 lines
3.0 KiB
Objective-C
//
|
|
// ExampleWKWebViewController.m
|
|
// ExampleApp-iOS
|
|
//
|
|
// Created by Marcus Westin on 1/13/14.
|
|
// Copyright (c) 2014 Marcus Westin. All rights reserved.
|
|
//
|
|
|
|
#import "ExampleWKWebViewController.h"
|
|
#import "WebViewJavascriptBridge.h"
|
|
|
|
@interface ExampleWKWebViewController ()
|
|
|
|
@property WebViewJavascriptBridge* bridge;
|
|
|
|
@end
|
|
|
|
@implementation ExampleWKWebViewController
|
|
|
|
- (void)viewWillAppear:(BOOL)animated {
|
|
if (_bridge) { return; }
|
|
|
|
WKWebView* webView = [[NSClassFromString(@"WKWebView") alloc] initWithFrame:self.view.bounds];
|
|
webView.navigationDelegate = self;
|
|
[self.view addSubview:webView];
|
|
[WebViewJavascriptBridge enableLogging];
|
|
_bridge = [WebViewJavascriptBridge bridgeForWebView:webView];
|
|
[_bridge setWebViewDelegate:self];
|
|
|
|
[_bridge registerHandler:@"testObjcCallback" handler:^(id data, WVJBResponseCallback responseCallback) {
|
|
NSLog(@"testObjcCallback called: %@", data);
|
|
responseCallback(@"Response from testObjcCallback");
|
|
}];
|
|
|
|
[_bridge callHandler:@"testJavascriptHandler" data:@{ @"foo":@"before ready" }];
|
|
|
|
[self renderButtons:webView];
|
|
[self loadExamplePage:webView];
|
|
}
|
|
|
|
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {
|
|
NSLog(@"webViewDidStartLoad");
|
|
}
|
|
|
|
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
|
|
NSLog(@"webViewDidFinishLoad");
|
|
}
|
|
|
|
- (void)renderButtons:(WKWebView*)webView {
|
|
UIFont* font = [UIFont fontWithName:@"HelveticaNeue" size:12.0];
|
|
|
|
UIButton *callbackButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
|
|
[callbackButton setTitle:@"Call handler" forState:UIControlStateNormal];
|
|
[callbackButton addTarget:self action:@selector(callHandler:) forControlEvents:UIControlEventTouchUpInside];
|
|
[self.view insertSubview:callbackButton aboveSubview:webView];
|
|
callbackButton.frame = CGRectMake(10, 400, 100, 35);
|
|
callbackButton.titleLabel.font = font;
|
|
|
|
UIButton* reloadButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
|
|
[reloadButton setTitle:@"Reload webview" forState:UIControlStateNormal];
|
|
[reloadButton addTarget:webView action:@selector(reload) forControlEvents:UIControlEventTouchUpInside];
|
|
[self.view insertSubview:reloadButton aboveSubview:webView];
|
|
reloadButton.frame = CGRectMake(110, 400, 100, 35);
|
|
reloadButton.titleLabel.font = font;
|
|
}
|
|
|
|
- (void)callHandler:(id)sender {
|
|
id data = @{ @"greetingFromObjC": @"Hi there, JS!" };
|
|
[_bridge callHandler:@"testJavascriptHandler" data:data responseCallback:^(id response) {
|
|
NSLog(@"testJavascriptHandler responded: %@", response);
|
|
}];
|
|
}
|
|
|
|
- (void)loadExamplePage:(WKWebView*)webView {
|
|
NSString* htmlPath = [[NSBundle mainBundle] pathForResource:@"ExampleApp" ofType:@"html"];
|
|
NSString* appHtml = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil];
|
|
NSURL *baseURL = [NSURL fileURLWithPath:htmlPath];
|
|
[webView loadHTMLString:appHtml baseURL:baseURL];
|
|
}
|
|
@end
|