在Objective-C的WebView中检测ASP页面Onclick事件及跳转问题
我来帮你搞定这个UIWebView链接拦截的问题!你的场景很清晰——要精准区分classbook.asp的业务跳转链接和谷歌地图链接,避免误触发segue跳转。下面是具体的解决方案:
解决步骤与代码实现
1. 核心思路:精准识别链接类型
在shouldStartLoadWithRequest代理方法里,我们需要做两层判断:
- 先过滤掉非用户主动点击的请求(比如页面自动跳转、JS刷新、iframe加载)
- 再区分目标URL是
classbook.asp业务链接,还是谷歌地图链接,分别处理
2. 完整代码示例
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { // 只处理用户主动点击的链接,排除自动跳转等场景 if (navigationType == UIWebViewNavigationTypeLinkClicked) { NSString *urlString = request.URL.absoluteString; // 匹配classbook.asp链接,触发segue跳转 if ([urlString containsString:@"classbook.asp"]) { // 替换成你实际的segue标识符 [self performSegueWithIdentifier:@"ShowClassbookVC" sender:self]; // 返回NO阻止WebView加载该链接,因为我们用新VC处理了 return NO; } // 处理谷歌地图链接:可选跳转系统地图APP或让WebView加载 else if ([urlString containsString:@"maps.google.com"] || [urlString containsString:@"google.com/maps"]) { // 方案1:跳转到系统地图应用 [[UIApplication sharedApplication] openURL:request.URL options:@{} completionHandler:nil]; return NO; // 方案2:让WebView继续加载地图页面,就把上面两行换成 return YES; } } // 其他所有情况,允许WebView正常处理 return YES; }
3. 关键细节优化
- 精准匹配URL路径:如果
classbook.asp可能出现在URL参数里(比如other.asp?redirect=classbook.asp),可以用路径匹配代替字符串包含,避免误判:
NSString *path = request.URL.path; if ([path containsString:@"classbook.asp"]) { // 触发segue逻辑 }
- 弃用提示:UIWebView已经被苹果官方弃用,如果是新项目,建议换成
WKWebView,它的webView:decidePolicyForNavigationAction:decisionHandler:代理方法功能更灵活,安全性也更高。
内容的提问来源于stack exchange,提问作者Hanz Cheah
相关产品推荐
相关产品推荐

