Снимите выделенную ссылку, когда webView: shouldStartLoadWithRequest: navigationType: возвращает false - PullRequest
2 голосов
/ 05 января 2010

Я показываю некоторые HTML со ссылками в UIWebView. Я хочу, чтобы ссылки открывались в 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 ]

2 голосов
/ 14 января 2010

Я думаю, что это признак базового кода WebKit и способа, которым MobileSafari эмулирует положение «мыши».

Вы можете попробовать установить CSS для этих элементов примерно так:

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

Если мое предположение верно, причина, по которой он становится синим и подчеркивается, заключается в том, что Safari считает, что курсор мыши теперь находится над этим элементом. Использование правильной комбинации селекторов CSS должно исправить это. (Может быть, нужно добавить: посещения и: посещения: наведите курсор, чтобы быть уверенным.)

1 голос
/ 05 января 2010

Вы должны будете использовать UIWebView stringByEvaluatingJavaScriptFromString: с чем-то вроде document.getElementById ('yourlinksid'), чтобы установить состояние отмены выбора.

Если файл не слишком большой, вы можете попробовать с помощью js выбрать все элементы (с помощью функции выбора xpath или css, а затем установить их как невыбранные, а не пытаться найти конкретный). У меня нет рецепта JS для этого на макушке головы, но интерфейс UIWebView JS, как вы должны это сделать.

...