2009-02-25 129 views

回答

4

UIWebView是WebKit完整的WebView蒼白,可憐的小陰影,爲此很容易。 -webView:shouldStartLoadWithRequest:navigationType:只會被調用導航。它不會在mac上爲每個請求調用WebPolicyDelegate。與UIWebView,這裏是我將如何攻擊這個問題:

執行-webView:shouldStartLoadWithRequest:navigationType:並將其設置爲始終返回NO。但你也會接受請求併產生一個NSURLConnection。當NSURLConnection完成提取數據時,您將通過它查看任何IMG標記並將其修改爲任何您想要的佔位符。然後,您將使用-loadHTMLString:baseURL:將結果字符串加載到UIWebView中。

當然在iPhone上解析HTML並不是一件簡單的事情,Javascript的載入器會給你帶來麻煩,所以這不是一個完美的答案,但它是我所知道的最好的。

0

是在UIWebView的委託,然後截取電話:navigationType的

– webView:shouldStartLoadWithRequest:navigationType: 

檢查值的文檔。我相信你會得到最好的回報NOnavigationType == UIWebViewNavigationTypeOther

+0

webView:shouldStartLoadWithRequest:navigationType:在下載發生後被調用。 – Harry 2009-05-03 09:26:27

0

這實際上是否導致頁面加載速度更快? 它聽起來像圖像仍在下載,但我們只是沒有餵它們到UIWebView。

還是shouldStartLoadWithRequest只是首先加載HTML文本?

1

擴展Rob的答案。 我注意到,當loadHTMLString:baseURL:並且總是返回NO時,該webView:shouldStartLoadWithRequest:navigationType:只是不停地被調用。 (我懷疑loadHTMLString調用另一個shouldStartLoadWithRequest)。

所以我不得不做回之間是交替YES/NO ,我用NSScanner解析HTML和變化SRC = 「HTTP:// ......」 爲src = 「」

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    if (pageHasNoImages==YES) 
    { 
     pageHasNoImages=FALSE; 
     return YES;  
    } 
    NSString* newHtml; 
    NSString* oldHtml; 
    NSData *urlData; 
    NSURLResponse *response; 
    NSError *error; 
    urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
    oldHtml=[[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding]; 

    newHtml=[self.detail scannerReplaceImg:oldHtml]; // my own function to parse HTML 
    newHtml=[self.detail scannerReplaceAds:newHtml]; // my own function to parse HTML 
    if (newHtml==nil) 
    { 
     NSLog(@"newHtml is nil"); 
     newHtml=oldHtml; 
    } 
    [oldHtml release]; 

    pageHasNoImages=TRUE; 
    [web loadHTMLString:newHtml baseURL:request.URL]; 

    return NO; 
}