UIWebView
创建UIWebView
UIWebView *web = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
加载到屏幕上
[self.view addSubview:web];
属性设置
web.scalesPageToFit = YES;/**< 自动对页面进行缩放以适应屏幕 */
web.detectsPhoneNumbers = YES;/**< 自动检测网页上的电话号码,单击可以拨打,已废弃 */
web.request;/**< 网络请求,只读,在iOS9中需要配置info.plist才能请求http网络*/
web.canGoBack;/**< 是否可以返回,只读 */
web.canGoForward;/**< 是否可以向前,只读 */
web.loading;/**< 是否在加载,只读 */
加载网络内容
NSURL* url = [NSURL URLWithString:@"http://www.youku.com"];/**< 创建URL */
NSURLRequest* request = [NSURLRequest requestWithURL:url];/**< 创建NSURLRequest */
[web loadRequest:request];/**< 加载 */
加载本地路径
NSURL* url = [NSURL fileURLWithPath:filePath];/**< 创建URL */
NSURLRequest* request = [NSURLRequest requestWithURL:url];/**< 创建NSURLRequest */
[webView loadRequest:request];/**< 加载 */
UIWebView 还支持将一个NSString对象作为源来加载。你可以为其提供一个基础URL,来指导UIWebView对象如何跟随链接和加载远程资源:
[webView loadHTMLString:myHTML baseURL:[NSURL URLWithString:@"http://baidu.com"]];
UIWebView类内部会管理浏览器的导航动作,通过goForward和goBack方法你可以控制前进与后退动作
[webView goBack];
[webView goForward];
[webView reload];//重载
[webView stopLoading];//取消载入内容
代理方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
// 当网页视图被指示载入内容而得到通知。应当返回YES,这样会进行加载。通过导航类型参数可以得到请求发起的原因,可以是以下任意值
/**
UIWebViewNavigationTypeLinkClicked
UIWebViewNavigationTypeFormSubmitted
UIWebViewNavigationTypeBackForward
UIWebViewNavigationTypeReload
UIWebViewNavigationTypeFormResubmitted
UIWebViewNavigationTypeOther
*/
return YES;
}
- (void)webViewDidStartLoad:(UIWebView *)webView
{
// 网页开始加载的时候调用
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
// 网页结束加载的时候调用
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error
{
// 因为某个错误导致网络加载失败的时候调用
}
由于iOS9对网络请求的安全性有了更深层的保护,所以以前http的网络请求想要使用需要修改plist文件。详情请见@程序犭袁的GitHub iOS9网络适配
方法一:
方法一:
info.plist 添加以下代码
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.weather.com.cn</key>
<dict>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
NSExceptionDomains:里面放的是允许使用http请求的sever字典。
www.weather.com.cn:允许使用http请求的sever的名字,里面放的是对这个sever的一切配置。(替换成自己项目的sever的就好)
NSIncludesSubdomains:是否允许子域名。
NSTemporaryExceptionAllowsInsecureHTTPLoads:是否允许进行http请求
方法二:
方法二:
info.plist 添加以下代码
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
NSAllowsArbitraryLoads:允许任意请求加载。(彻底回到之前的方式)
截止到目前,官方文档只是说需要配置Info.plist。但是貌似并没有提及到如何去进行配置。顺便上个图。
这段话的意思总结一下就三点。
不管是建立新项目还是更新旧项目,赶紧给我换这种安全的方式。
如果你尝试不这么做,那么我就给你报错。
如果你真的不想这么做,那么去Info.plist里面去指定那个不安全的server。
就手机端而言,第一种方式相比第二种方式更加合理。第二种方式虽然简单粗暴。但是很简单。如果想偷懒,那自然是使用第二种方式啦。