UIWebView与WKWebView基础及拓展及一些小tip9.10

1autoresizingMask http://www.cocoachina.com/ios/20141216/10652.html

2UIWebView的一些用法总结:设置阴影透明;移除外边阴影(即隐藏scrollview上的图片);点连接跳到safari(在代理方法拦截url,并用uiapplication的openurl方法)

https://blog.csdn.net/zhaoweixing1989/article/details/13021513

3、UIWebViewNavigationType

 linkClicked触及一个链接;formSubmitted提交表单;backForward前进或返回;reload重新加载;

 formResubmitted重复提交表单;other其他行为    https://blog.csdn.net/zhaoweixing1989/article/details/13021513

4、UIWebView的scalesPageToFit的作用:1:整屏显示内容:内容太大的话会跑到屏幕外,尤其是当有大图片时;2:并且用户可以用捏合动作来放大或缩小页面来查看内容  https://www.jianshu.com/p/17c07d77c8b8

5、UIWebView的代理:UIWebViewDelegate

1》是否允许加载页面请求:- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 

2》页面开始加载:- (void)webViewDidStartLoad:(UIWebView *)webView;

3》页面完成加载:- (void)webViewDidFinishLoad:(UIWebView *)webView;

4》页面加载失败:- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error;

6、WKWebView的代理:WKNavigationDelegate(其实是将UIWebViewDelegate细化)

1》请求之前决定是否要跳转,用户点击网页上的链接,需要打开新页面时调此方法:- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;

2》接收到相应数据后,决定是否跳转:- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler;

3》页面开始加载时调用:- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation;

4》主机地址被重定向时调用:- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(null_unspecified WKNavigation *)navigation;

5》页面加载失败时调用:- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error;

6》内容开始返回时调用:- (void)webView:(WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation;

7》页面加载完毕时调用:- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation;

8》跳转失败时调用:- (void)webView:(WKWebView *)webView didFailNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error;

9》需要证书验证,使用AFN进行Https证书验证是一样的:- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler;

10》9.0后才能用,web内容处理中断时会触发:- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView API_AVAILABLE(macosx(10.11), ios(9.0));

WKWebView的枚举:

  WKNavigationActionPolicy:WKNavigationActionPolicyCancel(发请求前决定不跳转)WKNavigationActionPolicyCancel(发请求之前决定不跳转)

WKNavigationResponsePolicy:WKNavigationResponsePolicyCancel(收到响应决定不跳转)WKNavigationResponsePolicyAllow(收到响应决定跳转)

6、跨域 浏览器对于javascript的同源策略的限制,例如a.cn下面的js不能调用b.cn中的js,对象或数据(因为a.cn和b.cn是不同域),所以跨域就出现了. https://www.cnblogs.com/chenshishuo/p/4919224.html

7.uiwebview支持跨域,wkwebview不支持跨域,据说safari是uiwebview写的,而WKWebView 使用和 Safari 相同的 Nitro JS 引擎性能 https://www.jianshu.com/p/00770d661916

8、解决wkwebview的跨域问题 https://blog.csdn.net/chenyong05314/article/details/53735215

9、wk缓存;关于cookie;关于跨域;js交互;关于NSUrlProtocaol拦截;关于post请求的坑;加载本地url的坑;捏合手势 https://blog.csdn.net/chenyong05314/article/details/53735215

10、wk交互及解决post请求的坑 https://www.jianshu.com/p/403853b63537

11、wkwebview源码解析(nice):https://www.cnblogs.com/tangyuanby2/p/5377248.html

12、注入js: - (void)addUserScript:(WKUserScript *)userScript;

13、js调原生:- (void)addScriptMessageHandler:(id<WKScriptMessageHandler>)scriptMessageHandler name:(NSString *)name;

14、webviewjavacriptbridge下载地址 https://github.com/marcuswestin/WebViewJavascriptBridge

========以下是UIWebView

15、1》内存泄露(注入中间对象;注入对象改为[self class];使用Block替换JSExport协议);https://www.jianshu.com/p/939db6215436

   2》创建JSContext,解决Ahtml5调到Bhtml页面,B页面交互无响应的情况;https://www.jianshu.com/p/939db6215436

16、js与oc交互:

    JSValue:代表JavaScript实体,一个JSValue可表示多个js原始类型,boolean, integers, doubles,甚至包括对象和函数

   JSContext: 代表JavaScript的运行环境,你需要用JSContext来执行JavaScript代码。所有的JSValue都是捆绑在一个JSContext上的。

    JSExport(js调oc时用): 这是一个协议,可以用这个协议来将原生对象导出给JavaScript,这样原生对象的属性或方法就成为了JavaScript的属性或方法,非常神奇。

   向UIWebVIew拿JSContext环境:1》KVC @"documentView.webView.mainFrame.javaScriptContext";

                                                 2》通过Nick Hodapp对象及webView:didCreateJavaScriptContext:forFrame:方法拿

                                                        3》JSExportAs

                                              4》注意UIWebView执行JS代码使用的是stringByEvaluatingJavaScriptFromString方法

                                               5》JavaScriptCore执行JS代码使用的是- (JSValue *)evaluateScript:(NSString *)script;方法

https://www.jianshu.com/p/59242a92d4f2      

https://blog.csdn.net/robinson_911/article/details/70257981

17、JavaScriptcore初探:JSManagedValue解决循环引用 https://hjgitbook.gitbooks.io/ios/content/04-technical-research/04-javascriptcore-note.html

猜你喜欢

转载自blog.csdn.net/denggun12345/article/details/83011678