2013-10-14 75 views
0

我發佈此消息,因爲我還沒有找到任何答案。UIWebView webViewDidStartLoad不叫

我發送請求到我的UIWebViewwebViewDidStartLoad不被調用。我需要使用方法重新加載,然後它將工作。順便說一下shouldStartLoadWithRequest被調用了兩次。

如果我正在使用測試網址(如說谷歌),我不會有任何問題。所以它似乎不是從我的代碼。

但在這裏,我打電話給一個醜陋的網站,他使用了很多角JS(我不知道它是如何製作的)。奇怪的是,它在Safari上運行良好。

我不明白的是,它只是「卡住」在shouldStartLoadWithRequest。但沒有回調之後。什麼都沒有發生,甚至(didFailLoadWithError:)。 有什麼想法?

** *編輯* ** * *

好吧,我發現了問題,但仍然是一個陌生的相關問題。我發現解決方案試圖向你發送代碼,我不相信代碼實際上工作。

事實是,我在調用http請求的同時我的web視圖被隱藏了,我不知道爲什麼,第二個調用從來沒有工作。你不能再現這個「bug」,因爲這個網站是沙盒式的,而且我已經在谷歌上測試過了,而且這個工作正常。

您需要知道,我測試過的網站使用了很多基於GUI狀態的角JS。如果有人仍然可以解釋我怎麼可以從服務器端卡住uiwebview(webViewDidStartLoad從未呼叫),我會很高興。所以這個錯誤是100%與服務器相關的。

下面的代碼:

@interface ViewController()<UIWebViewDelegate> 
@property(nonatomic, retain)UIWebView* webview; 
@end 

@implementation ViewController 
@synthesize webview = _webview; 

#pragma mark - UIWebViewDelegate 

- (BOOL)webView:(UIWebView *)webView 
    shouldStartLoadWithRequest:(NSURLRequest *)request 
    navigationType:(UIWebViewNavigationType)navigationType{  
    return YES; 
} 

- (void)webViewDidStartLoad:(UIWebView *)webView{ 
    // With that ugly site it will be never called if _webview.hidden is set to true. 
} 

#pragma mark - lifeCycle 

- (void)viewDidLoad{ 
    [self setUpWebView]; 

    // first time, it will work. 
    [self performSelector: @selector(loadUrlString:) withObject: @"http://theUglySite.com" afterDelay: 1]; 

    // now, if the uiwebview is hidden, no response. 
    [self performSelector: @selector(loadUrlString:) withObject: @"http://theUglySite.com" afterDelay: 3]; 

    [super viewDidLoad]; 
} 

#pragma mark - logic 

- (void)setUpWebView{ 
    self.webview  = [[[UIWebView alloc] initWithFrame:(CGRect){0,0,320,480}] autorelease]; 
    _webview.delegate = self; 

    // hidding the webView will break the delegate callBack. That will still work on normal 
    // urlRequest. 
    _webview.hidden = YES; 

    [self.view addSubview: _webview]; 
} 

- (void)loadUrlString:(NSString*)urlString{ 
    NSURL* url = [NSURL URLWithString: urlString]; 
    NSURLRequest* request = [NSURLRequest requestWithURL: url]; 
    [_webview loadRequest: request]; 
} 

@end 
+0

你能分享你的代碼嗎? – Popeye

+0

你是否在'.h'文件中實現了'UIWebviewDelegate'? –

+1

@AkshitZaveri如果他沒有實現'UIWebviewDelegate',它永遠不會調用'webviewDidStartLoad'和'shouldStartLoadWithRequest:'。所以如果它最終能夠實現這些方法,就必須實施。 – Popeye

回答

0

顯然,在IOS檢查的WebView專門用於在HTML中的DOM「IFRAME」標籤,並在找到的情況下,它會創建一個基於此標籤,以及事件。因此,一個簡單的但斑塊狀溶液將被加入在被改變DOM的一部分將下面的代碼(例如,在每個部分的實際的模板):

<iframe></iframe> 

確實起作用爲我..我也使用angularjs版本1.3.16

相關問題