当webView:shouldStartLoadWithRequest:navigationType:返回false时,取消选择突出显示的链接

时间:2010-01-04 23:07:33

标签: javascript iphone uiwebview webkit

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

但无济于事。

2 个答案:

答案 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界面就是你必须要做的。