WebView的一些用法

蒐集的一些webView的用法,不斷整理中。。。。

1、創建UIWebView:

CGRect bouds = [[UIScreen manScreen]applicationFrame]; 
UIWebView* webView = [[UIWebView alloc]initWithFrame:bounds];

2、設置屬性:

webView.scalespageToFit = YES;//自動對頁面進行縮放以適應屏幕 
webView.detectsPhoneNumbers = YES;//自動檢測網頁上的電話號碼,單擊可以撥打

3、顯示網頁視圖UIWebView:

[self.view addSubview:webView];

4、加載內容

NSURL* url = [NSURL URLWithString:@"http://www.baidu.com"];//創建URL 
NSURLRequest* request = [NSURLRequest requestWithURL:url];//創建NSURLRequest 
[webView 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"]];

5、導航

UIWebView類內部會管理瀏覽器的導航動作,通過goForward和goBack方法你可以控制前進與後退動作:

[webView goBack]; 
[webView goForward]; 
[webView reload];//重載 
[webView stopLoading];//取消載入內容

6、一些後續補充

使用UIWebView不適合把UIWebView在作爲子控件加入到ScrollView上,webView自帶一個ScrollView,滑動過程中會出現上下一起滑的效果。目前並未解決

1.隱藏上下滾動時出邊界的後面的黑色的陰影
- (void) hideGradientBackground:(UIView*)theView
{
  for (UIView * subview in theView.subviews)
  {
    if ([subview isKindOfClass:[UIImageView class]])
      subview.hidden = YES;
    [self hideGradientBackground:subview];
  }
}



2. 禁用拖拽時的反彈效果
[(UIScrollView *)[[webView subviews] objectAtIndex:0] setBounces:NO];  

禁用整個頁面的用戶選擇和鏈接彈出框,

- (void)webViewDidFinishLoad:(UIWebView *)webView {
   // 禁用用戶選擇
   [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitUserSelect='none';"];
   // 禁用長按彈出框
   [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout='none';"];
}


3. 判斷用戶點擊類型
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    switch (navigationType) 
    {
        //點擊連接
        case UIWebViewNavigationTypeLinkClicked:
        {
            NSLog(@"clicked");
        }
            break;
        //提交表單
        case UIWebViewNavigationTypeFormSubmitted:
        {
            NSLog(@"submitted");
        }
        default:
            break;
    }
    return YES;
}


UIWebView主要有下面幾個委託方法:

1、- (void)webViewDidStartLoad:(UIWebView *)webView;開始加載的時候執行該方法。
2、- (void)webViewDidFinishLoad:(UIWebView *)webView;加載完成的時候執行該方法。
3、- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;加載出錯的時候執行該方法。

6、UIWebViewDelegate委託代理

UIWebView支持一組委託方法,這些方法將在特定時間得到通知。要使用這些方法,必須先設定webView的委託:

webView.delegate = self; 

下面每個委託方法的第一個參數都是指向一個UIwebview的指針,因此你可以將一個委託用於多個網頁視圖。

-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*) reuqest navigationType: (UIWebViewNavigationType)navigationType;//當網頁視圖被指示載入內容而得到通知。應當返回YES,這樣會進行加載。通過導航類型參數可以得到請求發起的原因,可以是以下任意值: 
UIWebViewNavigationTypeLinkClicked 
UIWebViewNavigationTypeFormSubmitted 
UIWebViewNavigationTypeBackForward 
UIWebViewNavigationTypeReload 
UIWebViewNavigationTypeFormResubmitted 
UIWebViewNavigationTypeOther


二、IOS中UIWebView常用注意點:

1、與UIWebView進行交互,調用web頁面中的需要傳參的函數時,參數需要帶單引號,或者雙引號(雙引號需要進行轉義在轉義字符前加\),在傳遞json字符串時不需要加單引號或雙引號:

-(void)webViewDidFinishLoad:(UIWebView *)webView
{

NSString *sendJsStr=[NSString stringWithFormat:@"openFile(\"%@\")",jsDocPathStr];

[webView stringByEvaluatingJavaScriptFromString:sendJsStr];

}

2、在該代理方法中判斷與webView的交互,可通過html裏定義的協議實現:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType

3、只有在webView加載完畢之後在能夠調用對應頁面中的js方法。(對應方法如第1條).

4、爲webView添加背景圖片:

approvalWebView.backgroundColor=[UIColor clearColor];

approvalWebView.opaque=NO;//這句話很重要,webView是否是不透明的,no爲透明 在webView下添加個imageView展示圖片就可以了

5、獲取webView頁面內容信息:

NSString *docStr=[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.textContent"];//獲取web頁面內容信息,此處獲取的是個json字符串

SBJsonParser *parserJson=[[[SBJsonParser alloc]init]autorelease];

NSDictionary *contentDic=[parserJson objectWithString:docStr];//將json字符串轉化爲字典

6、 加載本地文件的方法:

//第一種方法:

NSString* path = [[NSBundle mainBundle] pathForResource:name ofType:@"html" inDirectory:@"mobile"];//mobile是根目錄,name是文件名稱,html是文件類型

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]]; //加載本地文件

//第二種方法:

NSString *resourcePath = [[NSBundle mainBundle] resourcePath]; 

NSString *filePath = [resourcePath stringByAppendingPathComponent:@"mobile.html"]; 

NSString *htmlstring=[[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; 

[uiwebview loadHTMLString:htmlstring baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];

7、將文件下載到本地址然後再用webView打開:

NSString *resourceDocPath = [[NSString alloc] initWithString:[[[[NSBundle mainBundle] resourcePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"Documents"]];

self.filePath = [resourceDocPath stringByAppendingPathComponent:[NSString stringWithFormat:@"maydoc%@",docType]];

NSData *attachmentData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:theUrl]];

[attachmentData writeToFile:filePath atomically:YES];

NSURL *url = [NSURL fileURLWithPath:filePath];

NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

[attachmentWebView loadRequest:requestObj];

//刪除指定目錄下的文件
NSFileManager *magngerDoc=[NSFileManager defaultManager];
[magngerDoc removeItemAtPath:filePath error:nil];

8、處理webView展示txt文檔亂碼問題:

if ([theType isEqualToString:@".txt"]) 
{
//txt分帶編碼和不帶編碼兩種,帶編碼的如UTF-8格式txt,不帶編碼的如ANSI格式txt
//不帶的,可以依次嘗試GBK和GB18030編碼
NSString* aStr = [[NSString alloc] initWithData:attachmentData encoding:NSUTF8StringEncoding];
if (!aStr) 
{
//用GBK進行編碼
aStr=[[NSString alloc] initWithData:attachmentData encoding:0x80000632];
}
if (!aStr) 
{
//用GBK編碼不行,再用GB18030編碼
aStr=[[NSString alloc] initWithData:attachmentData encoding:0x80000631];
}

//webView  高度獲取

- (void)webViewDidFinishLoad:(UIWebView *)webView 

</pre><p></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:8px; word-wrap:break-word; word-break:break-all; border-width:0px; list-style:none"></p><pre name="code" class="objc">{     

     CGRect frame = webView.frame;  

      NSString *fitHeight = [webview stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"];  

     frame.size.height = [fitHeight floatValue];

     webView.frame = frame;

}


網頁的滾動位置:

    - (CGPoint)scrollOffset {
        CGPoint pt;
        pt.x = [[self stringByEvaluatingJavaScriptFromString:@"window.pageXOffset"] integerValue];
        pt.y = [[self stringByEvaluatingJavaScriptFromString:@"window.pageYOffset"] integerValue];
        return pt;
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章