標籤:
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,發生其它行為。
iOS 擷取UIWebView上面的按鈕點擊事件