UIWebView相关协议方法总结
UIWebView Private Method
- UIWebView dump method:UIWebView.h
- 设置
UIWebView
在WebThread
线程下进行渲染,不占用主线程,代码如下:1
2[_webView performSelector:@selector(_setDrawInWebThread:) withObject:@YES];
[_webView performSelector:@selector(_setDrawsCheckeredPattern:) withObject:@YES];
WebResourceLoadDelegate Protocol
- (id)webView:(WebView *)sender identifierForInitialRequest:(NSURLRequest *)request fromDataSource:(WebDataSource *)dataSource
该方法返回一个标识符对象,网页中的每一个资源都会调用该方法。资源包括网页中嵌入的图片、脚本、
CSS
、嵌入在frame
中的页面。
UIWebViewDelegate Protocol
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
webView在加载一个frame之前会回调该方法,加载frame的情形包括加载新的页面、加载
iframe
的url时。navigationType
变量是一个枚举值,标识用户的动作,如点击、提交表单、前进、重载、重新提交表单、以及其他,其他包括重定向等。(注意,调用该方法,并不代表会发生真正的服务器请求,比如fragment
)- (void)webViewDidFinishLoad:(UIWebView *)webView
注意,该方法并不是表示webView完成了网页的加载,而是表示完成了一个frame的加载,所以可能会出现加载一个网页时被调用多次的情况。
- (void)webViewDidStartLoad:(UIWebView *)webView
当webView开始加载
frame
时调用,注意,该方法不管加载是否成功都会调用。
WebFrameLoadDelegate Protocol
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
当frame
完成时调用,既frame
的所有资源都已经加载完成。WebFrame
封装了一个单独的frame
元素,而一个完整的页面则由一个WebFrame
的层级树组成,根WebFrame
称为main frame
,每一个WebFrame
都对应一个WebFrameView
,其用来显示frame
的内容。- (void)webView:(WebView *)sender didReceiveTitle:(NSString *)title forFrame:(WebFrame *)frame
当frame
获取到title
时调用,该方法可能会被调用多次,想要及时更新标题的话可以实现该方法。
相关概念
- 在请求资源数据时,由于是异步的,所以可能成功,也可能失败,因此
Data Sources
就分为Provisional
和Committed
。一开始,data source
是Provisional
的,因为还不知道页面是否会加载成功,只要有响应数据到来,data source
就将变成Committed
的。