2012-03-11 2 views
10

Итак, я хотел бы обнаружить краны на UIWebView, если он не нажимает на ссылку. Как мне это сделать? Я знаю, что:как обнаружить краны на UIWebView, если это не ссылка

- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

вызывается каждый раз, когда нажимается ссылка. Однако, как я узнаю, что это коснуться UIWebView, отличного от ссылки? Я искал сеть, и ближайший я нашел this. Однако это не говорит мне, есть ли ответ на ссылку или нет.

ответ

0

Я считаю, что следующий метод должен работать теоретически. Вы можете сделать, это обернуть ваш UIWebView в контейнер UIView и установить распознаватели жестов на вид контейнера. Тогда события касания, которые не обрабатываются UIWebView, будут переданы иерархии представлений и будут перехвачены представлением вашего контейнера.

В контейнере UIView осуществить соответствующие обработчики & вы можете обнаружить ответвления. Надеюсь, что это ясно ...

Если этот подход не приносит плода, вы можете пойти по маршруту javascript. т. е. размещать события javascript, поскольку загрузка веб-страницы & вам хорошо. См. Здесь для получения дополнительной информации - Does UIGestureRecognizer work on a UIWebView?

+2

проблема нажав на ссылку еще вызывает распознаватель Нажмите значок жест – xonegirlz

+0

плохая часть - (BOOL) gestureRecognizer: (UIGestureRecognizer *) gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer вызывается до shouldStartLoadWithRequest выполняется – xonegirlz

+0

да, что будет происходить ,в 'gestureRecognizer' вам придется выяснить способ игнорировать жесты. –

1

Позвольте мне рассказать вам, почему это невозможно.

- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 
  1. Даже если это звучит нелепо, там будут звонки на этот метод делегата, когда пользователь нажал на ссылку с типом навигационной UIWebViewNavigationTypeOther вместо UIWebViewNavigationTypeLinkClicked. Это происходит с некоторыми страницами на основе javascript, которые обычно встречаются в Интернете.

  2. Даже если это звучит совершенно безумно, вызовы этого метода делегата будут выполняться с помощью UIWebViewNavigationTypeLinkClicked несколько раз, когда на самом деле пользователь не нажал ссылку. Некоторые веб-сайты встраивают содержимое фрейма/iframe, используя имитированный клик по скрытой кнопке, который вызывает несколько вызовов с помощью UIWebViewNavigationTypeLinkClicked.

    Этот странный способ встраивания контента с помощью имитированного щелчка делается , чтобы обойти настройки конфиденциальности некоторых браузеров. Google был предъявлен иск за это некоторое время назад и должен был заплатить несколько миллионов штрафов, , потому что они использовали этот трюк для установки файлов cookie в браузере Safari , даже если пользователь настроил браузер, чтобы не принимать эти куки.

Так что, если вы полагаться только на метод делегата UIWebView в вы получите щелчки, когда их нет, и ни при щелчки. Таким образом, в неконтролируемой среде это невозможно.

Но, что именно вы пытаетесь сделать?