webView 點擊方法與返回方法

UIWebView的一些用法總結的網址 http://blog.csdn.net/zhaoweixing1989/article/details/13021513


在網上看到很多文章都說iOS的UIWebView比較耗內存,在我的項目中,最開始我也是用UIWebView來加載網頁的。剛開始加載的是自己拼接成的Html,後來在Html中加入一個按鈕,點擊之後用當前的UIWebView去加載網絡上的網頁。程序跑起來發現非常耗內存,加載幾個網上的網頁之後就爆內存警告了,不處理的話很容易被評估拒掉app。後來就改成用系統的safari瀏覽器來打開網絡上的網頁,把着耗內存的工作交給蘋果自己自帶的瀏覽器來處理,就避免了我這個app crash。但是怎麼獲取網頁上這個按鈕點擊的事件呢,這個按鈕本身就綁定了一個url,怎麼讓它點擊之後當前的UIWebView不去load這個url呢。

後來查了一下資料,發現UIWebView的協議裏面有這麼個方法,可以獲取它加載的網頁上面的事件,比如單擊了圖片,單擊了按鈕等等。

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

{

//判斷是否是單擊

    if (navigationType == UIWebViewNavigationTypeLinkClicked)

    {

        NSURL *url = [request URL];

        if([[UIApplication sharedApplication]canOpenURL:url])

        {

            [[UIApplication sharedApplication]openURL:url];

        }

        return NO;

    }

    return YES;

}


拼接的Html最後加的按鈕的方法如下:

NSURL * path = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"source_page_button" ofType:@"png"]];

    [strReturn appendString:[NSString stringWithFormat:@"<div style='display:block;text-align:center;margin:0 auto;'><a href='%@'><img src='%@'></a></div>",_url,path]];


這樣寫了之後,點擊按鈕之後就不會用當前的UIWebView來加載網絡上的網頁,而是調用系統的Safari來打開。


注意:最後一點要返回YES,否則UIWebView剛開始將一片空白,這是因爲第一次加載的時候也是UIWebView請求一個鏈接,如果返回NO,就不會去加載了。還可以對url的內容進行判斷,看是什麼請求。


接口,如果爲webView添加了delegate對象並實現該接口,那麼在webView加載任何一個frame之前都會delegate對象的該方法,該方法的返回值用以控制是否允許加載目標鏈接頁面的內容,返回YES將直接加載內容,NO則反之。並且UIWebViewNavigationType枚舉,定義了頁面中用戶行爲的分類,包括

  • UIWebViewNavigationTypeLinkClicked,用戶觸擊了一個鏈接。
  • UIWebViewNavigationTypeFormSubmitted,用戶提交了一個表單。
  • UIWebViewNavigationTypeBackForward,用戶觸擊前進或返回按鈕。
  • UIWebViewNavigationTypeReload,用戶觸擊重新加載的按鈕。
  • UIWebViewNavigationTypeFormResubmitted,用戶重複提交表單
  • UIWebViewNavigationTypeOther,發生其它行爲。




 //判斷web是否能夠返回, 能返回就goBack, 不能就直接跳到上一級
    if ([web canGoBack]) {
       
        [web goBack];//原生
        bgViewF.hidden = NO;
    } else {
        
        [self.navigationController popViewControllerAnimated:YES];
    }


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