#import "wkWebviewViewController.h"
#import <WebKit/WebKit.h>
//签两个代理
@interface wkWebviewViewController ()<WKNavigationDelegate,WKUIDelegate>
@property(nonatomic,strong)WKWebView *wkwebView;
@end
@implementation wkWebviewViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor redColor];
/*
然后从以下几个方面说下WKWebView的基本用法:
1.加载网页
2.加载的状态回调
3.新的WKUIDelegate协议
4.动态加载并运行JS代码
5.webView 执行JS代码
6.JS调用App注册过的方法
*/
//WKwebview的使用
//1.首先得引用库文件,WKWebView是webKIt的,#import<WebKit/WebKit.h>
//2.声明属性
//3.初始化
_wkwebView = [[WKWebView alloc] initWithFrame:CGRectMake(0,0, self.view.frame.size.width, self.view.frame.size.height-64)];
_wkwebView.backgroundColor = [UIColor yellowColor];
//4.如何添加透明的网页,以前设置背景色为clearColor就可以,但WK不行
_wkwebView.opaque = YES;
//5.设置代理,WKWebView有两个代理WKUIDelegate,WKNavigationDelegate,交互涉及到的主要在第二个代理方法里
//WKNavigationDelegate(加载的状态回调):用来追踪加载过程(页面开始加载、加载完成、加载失败)的方法:
//6.开始加载WKWebview内容:
NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.wkwebView loadRequest:request];
[self.view addSubview:self.wkwebView];
//遵循协议
self.wkwebView.navigationDelegate = self;
self.wkwebView.UIDelegate = self;
#pragma mark - 4.动态加载并运行js代码
//
// NSString *js = @"var count = document.images.length;for (var i = 0; i < count; i++) {var image = document.images[i];image.style.width=320;};window.alert('找到' + count + '张图');";
// //根据js字符串初始化WKUserScript对象
// WKUserScript *script = [[WKUserScript alloc] initWithSource:js injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
// //根据生成的WKUserScript对象,初始化WKWebViewConfiguration
// WKWebViewConfiguration *configa = [[WKWebViewConfiguration alloc] init];
// [configa.userContentController addUserScript:script];
// [self.wkwebView loadHTMLString:@"<head></head><imgea src='https://www.nsu.edu.cn/v/2014v3/img/background/3.jpg' />" baseURL:nil];
#pragma mark - 5.wkwebview执行js代码
//用户调用用JS写过的代码,一般指服务端开发的
//javaScriptString是js方法名,completionHandler是异步回调block
// [self.wkwebView evaluateJavaScript:@"javaScriptString " completionHandler:nil];
}
#pragma mark - 6.js调用APP注册过的方法
//在WKWebView里面注册供JS调用的方法,是通过WKUserConttentController类下面的方法
#pragma mark - 1.加载的状态回调(WKNavigationdelegate)
//用来追踪加载过程(页面开始加载、加载完成、加载失败)的方法
//页面开始加载时调用
-(void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation
{
NSLog(@"页面开始加载");
}
//当内容开始返回时调用
-(void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation
{
NSLog(@"内容开始返回");
}
//页面加载完成后调用
-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
{
NSLog(@"页面加载完成");
//已经添加,不能再次添加
// [[UIApplication sharedApplication].keyWindow addSubview:_wkwebView];
}
//页面加载失败时调用
-(void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error
{
NSLog(@"页面加载失败");
}
#pragma mark - 2.页面跳转的代理方法
//接到服务器跳转请求之后调用
/*
**
* @param webView 实现该代理的webview
* @param navigation 当前navigation
*/
-(void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation
{
NSLog(@"要跳转了");
}
//收到响应后,决定是否跳转
-(void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler
{
//如果响应的地址是百度,则允许跳转
if ([navigationResponse.response.URL.host.lowercaseString isEqualToString:@"www.baidu.com"]) {
//允许跳转
decisionHandler(WKNavigationResponsePolicyAllow);
}else{
//不允许跳转
decisionHandler(WKNavigationResponsePolicyCancel);
}
NSLog(@"你要跳转吗");
}
/**
* 在发送请求之前,决定是否跳转
*
* @param webView 实现该代理的webview
* @param navigationAction 当前navigation
* @param decisionHandler 是否调转block
*/
-(void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{
//如果请求的是百度地址,则延迟5s以后跳转
if ([navigationAction.request.URL.host.lowercaseString isEqualToString:@"www.baidu.com"]) {
//允许跳转
decisionHandler(WKNavigationActionPolicyAllow);
}else{
//不允许跳转
decisionHandler(WKNavigationActionPolicyCancel);
}
NSLog(@"发送请求之前,决定是否跳转");
}
#pragma mark - 3.新的WKUIDelegate协议
//这个协议主要用于WKWebView处理web界面的三种提示框(警告框、确认框、输入框)
//下面是警告框的例子:
/**
* web界面中有弹出警告框时调用
*
* @param webView 实现该代理的webview
* @param message 警告框中的内容
* @param frame 主窗口
* @param completionHandler 警告框消失调用
*/
-(void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL))completionHandler
{
message = @"警告前方高能!";
}
#pragma mark - 动态加载并运行js代码
//图片缩放的JS代码
//-(void)picZoom
//{
// NSString *js = @"var count = document.images.length;for (var i = 0;i < count; i++) {var image = document.images[i];image.style.width = 320;}window.alert('找到' + count + '张图');";
// //根据js字符串初始化WKUserScript对象
// WKUserScript *script = [[WKUserScript alloc] initWithSource:js injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
// //根据生成的WKUserScript对象,初始化WKWebViewConfiguration
// WKWebViewConfiguration *configa = [[WKWebViewConfiguration alloc] init];
// [configa.userContentController addUserScript:script];
// [self.wkwebView loadHTMLString:@"<head></head><imgea src='http://www.nsu.edu.cn/v/2014v3/img/background/3.jpg' />" baseURL:nil];
//}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
07-15
07-15
07-15
07-15
07-15
07-15
07-15
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交