2010-01-04 57 views
2

我在UIWebView中显示一些带有链接的HTML。我希望链接在用户确认链接应该打开后在Safari中打开。取消选择webView时突出显示的链接:shouldStartLoadWithRequest:navigationType:返回false

打开链接工作正常,但如果用户取消,链接保持选中状态并以蓝色突出显示。我如何取消选择链接并摆脱突出显示?

- (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();} 

但无济于事。

回答

2

我认为这是底层WebKit代码的症状,以及MobileSafari模拟“鼠标”位置的方式。

你可以尝试对这些元素的CSS设定成类似:

a.YourElementClassName:hover { text-decoration: none; } 

如果我的猜测是正确的,它的转向蓝色,越来越强调的原因是因为Safari浏览器认为现在的鼠标光标在那元件。使用正确的CSS选择器组合应该解决它。 (可能需要添加:访问和:visited:盘旋只是为了确保。)

1

您必须使用UIWebView stringByEvaluatingJavaScriptFromString:与document.getElementById('yourlinksid')类似的设置状态为取消选择。

如果文件不是太大,可以尝试使用js选择所有元素(使用xpath或css选择器获取函数),然后将其设置为取消选择,而不是尝试查找特定的元素。我的头顶没有JS配方,但UIWebView JS界面是你必须这样做的。