我發佈此消息,因爲我還沒有找到任何答案。UIWebView webViewDidStartLoad不叫
我發送請求到我的UIWebView
,webViewDidStartLoad
不被調用。我需要使用方法重新加載,然後它將工作。順便說一下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
你能分享你的代碼嗎? – Popeye
你是否在'.h'文件中實現了'UIWebviewDelegate'? –
@AkshitZaveri如果他沒有實現'UIWebviewDelegate',它永遠不會調用'webviewDidStartLoad'和'shouldStartLoadWithRequest:'。所以如果它最終能夠實現這些方法,就必須實施。 – Popeye