Как обнаружить нажатие на UIWebView, если это не ссылка
Итак, я хотел бы обнаружить нажатие на UIWebView, если он не нажимает на ссылку. Как мне это сделать? Я знаю, что:
- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
вызывается каждый раз, когда нажимается ссылка. Однако, как я узнаю, если он коснулся UIWebView, который отличается от ссылки? Я искал сеть, и ближайший я нашел this. Однако это не говорит мне, есть ли ответ на ссылку или нет.
Ответы
Ответ 1
Я считаю, что следующий метод должен работать теоретически. Вы можете сделать, это обернуть UIWebView
в контейнер UIView
и установить распознаватели жестов в представлении контейнера. Тогда события касания, которые не обрабатываются UIWebView
, будут переданы иерархии представлений и будут перехвачены представлением вашего контейнера.
В контейнере UIView
реализуйте соответствующие обработчики, и вы можете обнаружить ответвления. Надеюсь, это ясно...
Если этот подход не приносит плода, вы можете перейти на javascript-маршрут. т.е. размещать события javascript в качестве загружаемых веб-страниц, и вам хорошо идти. Подробнее см. Здесь - Работает ли UIGestureRecognizer на UIWebView?
Ответ 2
Позвольте мне рассказать вам, почему это невозможно.
- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
-
Даже если это звучит нелепо, будут вызовы этого метода делегата, когда пользователь нажал ссылку с типом навигации UIWebViewNavigationTypeOther вместо UIWebViewNavigationTypeLinkClicked. Это происходит с некоторыми страницами на основе javascript, которые обычно встречаются в Интернете.
-
Даже если это звучит совершенно безумно, вызовы этого метода делегирования будут выполняться с помощью UIWebViewNavigationTypeLinkClicked несколько раз, когда на самом деле пользователь не нажал ссылку. Некоторые веб-сайты встраивают содержимое фрейма /iframe, используя имитированный клик по скрытой кнопке, который вызывает несколько вызовов с помощью UIWebViewNavigationTypeLinkClicked.
Этот странный способ встраивания контента с помощью имитированного клика
чтобы обойти настройки конфиденциальности некоторых браузеров. Google был подан в суд
для этого некоторое время назад и пришлось заплатить несколько миллионов штрафов,
потому что они использовали этот трюк для установки файлов cookie в браузере Safari
даже если пользователь настроил браузер, чтобы не принимать эти
печенье.
Итак, если вы только полагаетесь на метод делегирования UIWebView, вы будете получать клики, когда их нет, и нет, когда есть клики. Таким образом, в неконтролируемой среде это невозможно.
Но что именно вы пытаетесь сделать?