1、UIWebView簡介html
#import "ViewController.h" @interface ViewController () // 訪問指定URL字符串的內容,僅由文本框事件調用 - (void)gotoURLString:(NSString *)urlString; // 訪問指定的URL內容 - (void)gotoURL:(NSURL *)url; // 得到本地文件的MIMEType - (NSString *)MIMEType:(NSString *)fileName; @end @implementation ViewController #pragma mark - UIWebView加載內容的測試方法 // 加載HTML字符串 - (void)testLoadHTMLString { // 測試加載HTML字符串 NSString *html = @"<html><head><title>Hello</title></head><body><h1>Hello Itcast</h1></body></html>"; [_webView loadHTMLString:html baseURL:nil]; } // 加載部分HTML字符串測試 - (void)testLoadPartHTMLString { // 測試加載部分HTML字符串,不須要顯示整個網頁內容時,一般使用此方法 NSString *partHtml = @"<h1>Hello Itcast</h1>"; [_webView loadHTMLString:partHtml baseURL:nil]; } // 測試加載本地HTML文件 - (void)testLoadHTMLFile { // 測試加載本地HTML文件,須要指定MIMETYPE NSString *dataPath = [[NSBundle mainBundle]pathForResource:@"demo" ofType:@"html"]; NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]resourcePath] isDirectory:YES]; // 只有加載的html文件才須要指定baseURL路徑,告訴瀏覽器去哪裏找圖片、樣式表等文件 [_webView loadData:[NSData dataWithContentsOfFile:dataPath] MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:baseURL]; } // 加載本地PDF文件 - (void)testLoadPDFFile { // 測試加載本地PDF,須要指定MIMETYPE NSString *dataPath = [[NSBundle mainBundle]pathForResource:@"001.網絡基礎" ofType:@"pdf"]; [_webView loadData:[NSData dataWithContentsOfFile:dataPath] MIMEType:@"application/pdf" textEncodingName:@"UTF-8" baseURL:nil]; } // 加載本地文本文件 - (void)testLoadTextFile { // 測試加載本地文本文件,須要指定MIMETYPE NSString *dataPath = [[NSBundle mainBundle]pathForResource:@"關於" ofType:@"txt"]; [_webView loadData:[NSData dataWithContentsOfFile:dataPath] MIMEType:@"text/plain" textEncodingName:@"UTF-8" baseURL:nil]; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self MIMEType:@"001.網絡基礎.pdf"]; [self testLoadHTMLFile]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - UITextField代理方法 // 文本框回車事件 - (BOOL)textFieldShouldReturn:(UITextField *)textField { if (textField == _urlText && textField.text.length > 0) { [textField resignFirstResponder]; [self gotoURLString:textField.text]; } return YES; } #pragma mark - IBActions // 回退操做 - (IBAction)goBack:(id)sender { [_webView goBack]; } // 前進操做 - (IBAction)goForward:(id)sender { [_webView goForward]; } // 刷新 - (IBAction)reloadURL:(id)sender { [_webView reload]; } // 提交表單 - (IBAction)submit:(id)sender { // 獲取當前頁面的url NSString *url = [_webView stringByEvaluatingJavaScriptFromString:@"document.location.href"]; NSLog(@"url %@", url); // 獲取當前頁面的標題 NSString *title = [_webView stringByEvaluatingJavaScriptFromString:@"document.title"]; NSLog(@"title %@", title); // 提交表單 [_webView stringByEvaluatingJavaScriptFromString:@"document.forms[0].submit(); "]; } #pragma mark - 訪問指定URL內容 // 訪問指定URL字符串的內容,僅由文本框事件調用,文本框回車時候調用的 - (void)gotoURLString:(NSString *)urlString { NSURL *url = nil; // 判斷是不是httpURL if ([urlString hasPrefix:@"http://"]) { // URL中有中文的,是須要加百分號的! url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; } else if ([urlString hasPrefix:@"file://"]) { // 判斷給定參數是否已是完整的url路徑,避免出現前進後退後,URL變成完整URL沒法訪問的狀況 if ([urlString hasPrefix:@"file://localhost/"]) { // 注意此處不能使用fileURLWithPath方法 url = [NSURL URLWithString:urlString]; } else { // 若是沒有localhost前綴的,說明是新輸入的本地文件,須要轉換url。 // 檢測字串範圍 NSRange range = [urlString rangeOfString:@"file://"]; // 截取剩餘部分做爲文件名 NSString *fileName = [urlString substringFromIndex:range.length]; // 生成文件路徑 NSString *path = [[NSBundle mainBundle]pathForResource:fileName ofType:nil]; // 判斷文件是否存在 if ([[NSFileManager defaultManager]fileExistsAtPath:path]) { url = [NSURL fileURLWithPath:path]; } else { url = nil; } } } // 判斷輸入是否正確 if (url == nil) { UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"輸入地址不正確,請從新輸入!" delegate:nil cancelButtonTitle:@"肯定" otherButtonTitles:nil, nil]; [alert show]; // 設置文本框輸入焦點 [_urlText becomeFirstResponder]; } else { // 訪問指定的URL內容 [self gotoURL:url]; } } // 訪問指定的URL內容 - (void)gotoURL:(NSURL *)url { // 使用URL字符串替代URL文本框 [_urlText setText:[url absoluteString]]; // 定義請求 NSURLRequest *request = [NSURLRequest requestWithURL:url]; // 設置數據檢測類型 [_webView setDataDetectorTypes:UIDataDetectorTypeAll]; // 加載請求 [_webView loadRequest:request]; } // 得到本地文件的MIMEType - (NSString *)MIMEType:(NSString *)fileName { // 定義路徑 NSString *path = [[NSBundle mainBundle]pathForResource:fileName ofType:nil]; // 定義URL NSURL *url = [NSURL fileURLWithPath:path]; // 定義請求 NSURLRequest *request = [NSURLRequest requestWithURL: url]; // 定義響應 NSURLResponse *response = nil; // 發送同步請求 [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; NSLog(@"MIMEType is %@", [response MIMEType]); return [response MIMEType]; } #pragma mark - UIWebViewDelegate 代理方法 // 網頁開始加載的時候調用 - (void)webViewDidStartLoad:(UIWebView *)webView { NSLog(@"開始加載"); } // 網頁加載完成的時候調用 - (void)webViewDidFinishLoad:(UIWebView *)webView { NSLog(@"加載完成"); } // 網頁加載出錯的時候調用 - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { NSLog(@"加載出錯%@", [error localizedDescription]); } // 網頁中的每個請求都會被觸發這個方法,返回NO表明不執行這個請求(經常使用於JS與iOS之間通信) - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSLog(@"將要加載請求"); return YES; } @end