2012-07-03 32 views
0

我正在處理UIWebView,這樣我就可以控制哪些URL應該加載或不加載,但是即使重新調用NO,它仍然會加載頁面。雖然文檔明確指出如果您返回NO,UIWebView將不會加載頁面。UIWebView儘管返回NO仍然加載URL

當我調試時,我可以看到它正在返回NO但仍然UIWebView加載URL。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    NSLog(@"%@", [[request URL] absoluteString]); 
    NSString *fullURL = [[request URL] absoluteString]; 

    NSRange range = [fullURL rangeOfString:@"#"]; 
    if (range.length != 0) { 
     NSLog(@"We need to show the other view"); 

     return NO; 
    } 


    return YES; 
} 

回答

0

在返回YES部分之前設置斷點或NSLog。也許你的方法因爲任何原因被調用兩次,並且它返回NO,另一個返回YES。

+0

我做了那就是爲什麼我在原始問題中說我發現它返回NO,它沒有被調用兩次。 – Gripsoft

0

首先,請確保您設置在viewDidLoad中的委託與

webView.delegate = self; 

(照顧不設置它的2倍,在廈門國際銀行文件,並在viewDidLoad中,它才引起了我的問題)

確保您實現UIWebViewDelegate在您的類,像這樣:

@interface RootViewController : UIViewController<UIwebViewDelegate> 

假設你已經注意到了這一切關心和你仍然面臨的問題。此外,由於您調試,並確保委託方法返回NO。我能想到的一個原因是,你沒有加載一個新頁面,而是使用了諸如AJAX之類的東西。

我測試了2類型的網頁下面的代碼:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSLog(@"THE loadCount is %d", self.loadCount); 
    if (self.loadCount > 1){ 
     return NO; 
    } 
    self.loadCount++; 
    return YES; 
} 

案例1:,每一個URL加載了新的一頁的網頁。上面的代碼在這種情況下起作用,並且根據需要在第一次加載後無法加載任何頁面。

案例2:一個網頁,其中第一個加載是一個完整的新網頁。但其他的一切都用AJAX加載,在這種情況下,我的loadCount不會增加,頁面加載正常。

這就是我所能想到的與提供的數據。 :)

1

我解決了這個問題,在這裏記錄,所以它可能會幫助別人。其實,HTML,我們正在加載使用一些JavaScript導致這個問題。我通過使用幾個簡單的html並與他們一起測試發現。有一次,我們知道HTML是問題,我們現在修復了HTML及其工作。

-1

同樣的問題在這裏,只是爲了擴展上面的答案要小心,當使用rails 4作爲後端,因爲turbolinks添加javascript到每個鏈接,然後你可以得到錯誤的行爲在你的委託,發生了我在shouldStartLoadWithRequest返回NO,仍然看到請求在我的服務器上。

相關問題