我在一个Application中显示一个UIWebView,它在链接上接收点击后发送委托方法调用。 在委托方法
中- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
我抓住这些电话,处理链接网址并运行
[[UIApplication sharedApplication] openURL:processedURL];
这是按预期工作的,我最终到了正确的位置。
问题多任务: 如果我回到我的应用程序,它在关闭后仍然在后台运行,它将再次使用相同的链接调用“webView shouldStartLoadWithRequest”,所以我最终将用户发送到该页面两次。有没有一种避免这种情况的首选方法?
解决方案:
你们是完全正确的,我做了一个非常拉长的if-else来分析给定的URL,但不是在所有分支中,决定可能最终存在“返回否”......呃,完全是愚蠢的错误; )
答案 0 :(得分:1)
未经测试,但我建议这样做:
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
[[UIApplication sharedApplication] performSelector:@selector(openURL:)
withObject:processedURL
afterDelay:0];
return NO;
}
这样回调可以根据需要返回,在下一次runloop迭代中,它将调用openURL:
。
答案 1 :(得分:1)
清除UIWebView,以便在重新加载时,它没有待处理的请求。这可能是最好的方式:
[webView loadRequest:nil];
但如果这不起作用,您可以使用:
[webView loadHTMLString:@"" baseURL:nil];
当然,您应该从此委托方法返回NO
,因为您不希望webview尝试加载此内容。