区块链技术博客
www.b2bchain.cn

iOS WebView求职学习资料

本文介绍了iOS WebView求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

本篇博客总结下iOS环境下WebView的使用

WKNavigationDelegate

这里先介绍下WebView加载的代理

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {      if ([navigationAction.request.URL.absoluteString isEqualToString:@"https://www.baidu.com"])          decisionHandler(WKNavigationActionPolicyCancel);     decisionHandler(WKNavigationActionPolicyAllow); }

webview请求前的第一个代理,来判断要不要请求/加载数据,就比如上面的if语句,如果请求的URL是百度网址则拒绝此次请求

- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;

开始请求/加载,我理解这是在之前的那个代理确定要加载后就会马上到这个代理

- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;

开始有数据加载到页面,如果是一个请求服务端的页面,把网速调慢,会发现之前两个代理会马上调用,而这个调用会等一段时间才会调用,就是因为需要等待数据返回才能开始加载页面,如果把网毙掉,会发现永远不会执行这个代理

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;

这个是当数据全部加载到webview上时会调用的代理方法

- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error;

这个自然是加载失败了

WebView加载HTML方式

第一种:直接根据URL请求服务端资源

第二种:加载HTML的字符串

JS Bridge

下面这部分进入我做这篇博客的真正目的了,就是webView 和 JS 间的通信

JSB基础部分

主要参考了这篇博客

JS调用webView
首先写个HTML,这里也是用了上面博客的代码

<!DOCTYPE html>  <html>     <head>     <script>         function js2web() {             document.getElementById("js2web").value = '我已经被更改';             window.webkit.messageHandlers.showJSMsg.postMessage({name:'qxy'});         }     </script>     </head>      <body>     <div><input type="button" value="点击向webView传消息" onclick="js2web()" style="font-size:24px;" id="js2web"></div>     </body>  </html>

webView的代码:

    WKUserContentController *userCC = [WKUserContentController new];     [userCC addScriptMessageHandler:self name:@"showJSMsg"];     WKWebViewConfiguration *config = [WKWebViewConfiguration new];     config.userContentController = userCC;     self.webView = [[XYWebView alloc] initWithFrame:CGRectZero configuration:config];     self.webView.UIDelegate = self;     self.webView.navigationDelegate = self;      NSString *path = [[NSBundle mainBundle] pathForResource:@"jsb" ofType:@"html"];     NSString *htmlString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];     [self.webView loadHTMLString:htmlString baseURL:nil];  - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {      if ([message.name isEqualToString:@"showJSMsg"]) {         [self showJSMsg:message.body];     } }  - (void)showJSMsg:(NSDictionary *)msg {      NSLog(@"message:%@",msg); }

webView调用JS
新增一段js

function web2js() {             document.getElementById("para").innerHTML = '我已经被更改'         }

web调用js的代码比较简单:

    NSString *jseval = @"web2js()";     [self.webView evaluateJavaScript:jseval completionHandler:^(id _Nullable result, NSError * _Nullable error) {         NSLog(@"web2js success");     }];

本篇博客总结下iOS环境下WebView的使用

WKNavigationDelegate

这里先介绍下WebView加载的代理

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {      if ([navigationAction.request.URL.absoluteString isEqualToString:@"https://www.baidu.com"])          decisionHandler(WKNavigationActionPolicyCancel);     decisionHandler(WKNavigationActionPolicyAllow); }

webview请求前的第一个代理,来判断要不要请求/加载数据,就比如上面的if语句,如果请求的URL是百度网址则拒绝此次请求

- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;

开始请求/加载,我理解这是在之前的那个代理确定要加载后就会马上到这个代理

- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;

开始有数据加载到页面,如果是一个请求服务端的页面,把网速调慢,会发现之前两个代理会马上调用,而这个调用会等一段时间才会调用,就是因为需要等待数据返回才能开始加载页面,如果把网毙掉,会发现永远不会执行这个代理

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;

这个是当数据全部加载到webview上时会调用的代理方法

- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error;

这个自然是加载失败了

WebView加载HTML方式

第一种:直接根据URL请求服务端资源

第二种:加载HTML的字符串

JS Bridge

下面这部分进入我做这篇博客的真正目的了,就是webView 和 JS 间的通信

JSB基础部分

主要参考了这篇博客

JS调用webView
首先写个HTML,这里也是用了上面博客的代码

<!DOCTYPE html>  <html>     <head>     <script>         function js2web() {             document.getElementById("js2web").value = '我已经被更改';             window.webkit.messageHandlers.showJSMsg.postMessage({name:'qxy'});         }     </script>     </head>      <body>     <div><input type="button" value="点击向webView传消息" onclick="js2web()" style="font-size:24px;" id="js2web"></div>     </body>  </html>

webView的代码:

    WKUserContentController *userCC = [WKUserContentController new];     [userCC addScriptMessageHandler:self name:@"showJSMsg"];     WKWebViewConfiguration *config = [WKWebViewConfiguration new];     config.userContentController = userCC;     self.webView = [[XYWebView alloc] initWithFrame:CGRectZero configuration:config];     self.webView.UIDelegate = self;     self.webView.navigationDelegate = self;      NSString *path = [[NSBundle mainBundle] pathForResource:@"jsb" ofType:@"html"];     NSString *htmlString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];     [self.webView loadHTMLString:htmlString baseURL:nil];  - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {      if ([message.name isEqualToString:@"showJSMsg"]) {         [self showJSMsg:message.body];     } }  - (void)showJSMsg:(NSDictionary *)msg {      NSLog(@"message:%@",msg); }

webView调用JS
新增一段js

function web2js() {             document.getElementById("para").innerHTML = '我已经被更改'         }

web调用js的代码比较简单:

    NSString *jseval = @"web2js()";     [self.webView evaluateJavaScript:jseval completionHandler:^(id _Nullable result, NSError * _Nullable error) {         NSLog(@"web2js success");     }];

本篇博客总结下iOS环境下WebView的使用

WKNavigationDelegate

这里先介绍下WebView加载的代理

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {      if ([navigationAction.request.URL.absoluteString isEqualToString:@"https://www.baidu.com"])          decisionHandler(WKNavigationActionPolicyCancel);     decisionHandler(WKNavigationActionPolicyAllow); }

webview请求前的第一个代理,来判断要不要请求/加载数据,就比如上面的if语句,如果请求的URL是百度网址则拒绝此次请求

- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;

开始请求/加载,我理解这是在之前的那个代理确定要加载后就会马上到这个代理

- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;

开始有数据加载到页面,如果是一个请求服务端的页面,把网速调慢,会发现之前两个代理会马上调用,而这个调用会等一段时间才会调用,就是因为需要等待数据返回才能开始加载页面,如果把网毙掉,会发现永远不会执行这个代理

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;

这个是当数据全部加载到webview上时会调用的代理方法

- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error;

这个自然是加载失败了

WebView加载HTML方式

第一种:直接根据URL请求服务端资源

第二种:加载HTML的字符串

JS Bridge

下面这部分进入我做这篇博客的真正目的了,就是webView 和 JS 间的通信

JSB基础部分

主要参考了这篇博客

JS调用webView
首先写个HTML,这里也是用了上面博客的代码

<!DOCTYPE html>  <html>     <head>     <script>         function js2web() {             document.getElementById("js2web").value = '我已经被更改';             window.webkit.messageHandlers.showJSMsg.postMessage({name:'qxy'});         }     </script>     </head>      <body>     <div><input type="button" value="点击向webView传消息" onclick="js2web()" style="font-size:24px;" id="js2web"></div>     </body>  </html>

webView的代码:

    WKUserContentController *userCC = [WKUserContentController new];     [userCC addScriptMessageHandler:self name:@"showJSMsg"];     WKWebViewConfiguration *config = [WKWebViewConfiguration new];     config.userContentController = userCC;     self.webView = [[XYWebView alloc] initWithFrame:CGRectZero configuration:config];     self.webView.UIDelegate = self;     self.webView.navigationDelegate = self;      NSString *path = [[NSBundle mainBundle] pathForResource:@"jsb" ofType:@"html"];     NSString *htmlString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];     [self.webView loadHTMLString:htmlString baseURL:nil];  - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {      if ([message.name isEqualToString:@"showJSMsg"]) {         [self showJSMsg:message.body];     } }  - (void)showJSMsg:(NSDictionary *)msg {      NSLog(@"message:%@",msg); }

webView调用JS
新增一段js

function web2js() {             document.getElementById("para").innerHTML = '我已经被更改'         }

web调用js的代码比较简单:

    NSString *jseval = @"web2js()";     [self.webView evaluateJavaScript:jseval completionHandler:^(id _Nullable result, NSError * _Nullable error) {         NSLog(@"web2js success");     }];

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » iOS WebView求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们