Подтвердить что ты не робот

Отключить ссылки в UIWebView?

Я загружаю некоторый контент из Интернета в UIWebView, но я бы хотел, чтобы все ссылки были отключены в UIWebView. Это возможно? Я мог разобрать текст, но я ищу что-то проще.

4b9b3361

Ответ 1

Вы можете дать UIWebView a delegate и реализовать -webView:shouldStartLoadWithRequest:navigationType: делегировать метод return NO; (кроме начальной загрузки).

Это предотвратит просмотр пользователем ничего, кроме одной страницы.

Чтобы предоставить пример, запрошенный в комментариях... Начните с allowLoad=YES, а затем:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
    return allowLoad;
}

- (void)webViewDidFinishLoad:(UIWebView*)webView {
    allowLoad = NO;
}

Ответ 2

Протестировано в Swift 4.0: этот подход не требует наличия дополнительной переменной для проверки, является ли это начальной нагрузкой или нет. Просто проверьте тип запроса (в данном случае LinkClicked) и верните false в этом случае. В противном случае просто верните true!

(Конечно, убедитесь, что вы установили webView.delegate)

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    if navigationType == .linkClicked {
        return false
    }
    return true
}

Ответ 3

Вы можете отключить обнаружение данных в своем веб-просмотре.

[webView setDataDetectorTypes:UIDataDetectorTypeNone];

Ответ 4

Простой ответ, который работает в Swift 2.0:

yourWebView.dataDetectorTypes = UIDataDetectorTypes.None

Просто реализуйте его в контроллере представления, где вы определяете и используете свой веб-просмотр, и он будет работать безупречно.

Ответ 5

У меня была аналогичная потребность, и для некоторых случаев просто использование webViewDidFinishLoad было недостаточно, поэтому я использовал webViewDidStartLoad для покрытия всех случаев:

func webViewDidStartLoad(webView: UIWebView) {
    startedLoading = true
}

func webViewDidFinishLoad(webView: UIWebView) {
    alreadyOpen = true
}

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    if startedLoading && alreadyOpen {
        // do something
        return false
    }else if startedLoading && !alreadyOpen{
        return false
    }else if !startedLoading {
        return true
    }
    return true
}

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

Ответ 6

Для быстрого 3:

Попробуйте удалить типы, которые вы не хотите показывать в качестве ссылки из webView.dataDetectorTypes

webView.dataDetectorTypes.remove(UIDataDetectorTypes.all)

Ответ 7

Еще один ответ для Swift 3.0:
Просто дайте ноль, чтобы не обнаружить ссылку какого-либо типа исходного кода вашего веб-браузера

yourWebView.dataDetectorTypes =  UIDataDetectorTypes(rawValue: 0)