我在UIWebView中显示一些带链接的HTML。我希望在用户确认链接确实打开后,在Safari中打开链接。
打开链接可以正常工作,但如果用户取消,链接将保持选中状态并以蓝色突出显示。如何取消选择链接并摆脱突出显示?
- (BOOL)webView:(UIWebView *)aWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
self.url = request.URL;
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Open the Link in Safari" message:[request.URL absoluteString] delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK"];
[alert show];
[alert release];
return false;
}
return true;
}
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
[[UIApplication sharedApplication] openURL:url];
}
// Insert magic deselection code here
}
更新:似乎[UIWebView stringByEvaluatingJavaScriptFromString:]是要走的路。但到底怎么样?我试过了
for (var e in document.getElementsByTag("a")) {e.blur();}
但无济于事。
答案 0 :(得分:2)
我认为这是底层WebKit代码的症状以及MobileSafari模拟“鼠标”位置的方式。
您可以尝试将这些元素的CSS设置为:
a.YourElementClassName:hover { text-decoration: none; }
如果我的猜测是正确的,那么它变成蓝色并加下划线的原因是因为Safari认为鼠标光标现在已超过该元素。使用CSS选择器的正确组合应该修复它。 (可能需要添加:访问和:访问:悬停以确保。)
答案 1 :(得分:1)
您必须使用UIWebView stringByEvaluatingJavaScriptFromString:与document.getElementById('yourlinksid')之类的东西来设置要取消选择的状态。
如果文件不是太大,您可以尝试使用js选择所有元素(使用xpath或css选择器获取函数),然后将它们设置为取消选择,而不是尝试查找特定元素。我没有这方面的JS配方,但UIWebView JS界面就是你必须要做的。