我发布此消息是因为我没有找到任何答案。
我向我的 发送请求UIWebView
,webViewDidStartLoad
没有被调用。我需要使用方法重新加载,然后它会起作用。顺便说一下,shouldStartLoadWithRequest
然后调用了两次。
如果我使用的是测试网址(比如谷歌),我不会遇到任何问题。所以它似乎不是来自我的代码。
但是在这里,我称一个使用大量 Angular JS 的丑陋网站(我不知道它是如何制作的)。奇怪的是它在 Safari 上运行良好。
我不明白的是它只是被“卡住”了shouldStartLoadWithRequest
。但之后没有回调。什么都没有发生,即使是 ( didFailLoadWithError:
)。任何想法?
** *编辑* ** * *
好的,我发现了问题,但这仍然是一个奇怪的相关问题。我找到了试图向您发送代码的解决方案,但我无法相信该代码确实有效。
事实是,当我的 web 视图被隐藏时,我正在调用 http 请求,我不知道为什么,第二个调用永远不会工作。您无法重现“错误”,因为该网站是沙盒化的,并且我已经在 Google 上进行了测试,并且可以正常工作。
您需要知道我测试过的网站使用了大量基于 GUI 状态的 Angular JS。如果有人仍然可以向我解释如何从服务器端卡住 uiwebview(从未调用过 webViewDidStartLoad),我会很高兴。所以这个bug是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