代码之家  ›  专栏  ›  技术社区  ›  Daniel Hepper

当WebView:ShouldStartLoadWithRequest:NavigationType:返回false时取消选择突出显示的链接

  •  2
  • Daniel Hepper  · 技术社区  · 14 年前

    我在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 StringByEvaluingJavaScriptfromString:]但具体情况如何?我试过

    for (var e in document.getElementsByTag("a")) {e.blur();}
    

    但无济于事。

    2 回复  |  直到 14 年前
        1
  •  2
  •   clee    14 年前

    我认为这是基础WebKit代码的症状,也是MobileSafari模拟“鼠标”位置的方式。

    您可以尝试将这些元素的CSS设置为:

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

    如果我的猜测是正确的,它变蓝并加下划线的原因是因为Safari认为鼠标光标现在位于该元素上。使用正确的CSS选择器组合应该可以修复它。(可能需要添加:已访问和:已访问:悬停以确定。)

        2
  •  1
  •   Nimrod    14 年前

    必须将uiWebView StringByEvaluatingJavaScriptfromString:与document.getElementByID(“yourlinksid”)一起使用,才能将状态设置为取消选择。

    如果文件不太大,您可以尝试使用JS选择所有元素(使用xpath或css选择器get函数),然后将它们设置为取消选择,而不是尝试查找特定的元素。我没有一个JS的方法可以解决这个问题,但是uiwebview的JS界面是你需要做的。