UIWebView говорит «URL не может быть показан» при попытке открыть URL для другого приложения, но он работает в Safari - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь исправить старое приложение для iOS, где UIWebView не открывает URL-адрес другого приложения.Приложение говорит: «Невозможно отобразить URL», что может указывать на неправильный URL, но я могу открыть его непосредственно в Safari.

Я получил ответственность за исправление приложения для своей компании, и я неЯ имею большой опыт работы с Objective C, поэтому я надеюсь, что вы можете мне помочь.Ранее приложение работало, но внезапно перестало работать в 2016 году. Это, вероятно, из-за обновления, которое произошло в это время, которое изменило функциональность somURL.

Приложение открывает UIWebView и через него обращается к веб-сервису, откуда пользователь может ввести некоторую информацию и т. Д. Этот веб-сервис затем вызывает другое приложение для печати этикетки, но вместо этого просто отображает всплывающее окно с URL can't be shown.

Когда я пишу этот URL-адрес непосредственно в Safari, он открывает приложение и работает без проблем.Это заставило меня думать, что проблема может быть где-то в UIWebView, но я не могу точно определить, где это может быть.

Я не знаю, какой фрагмент справки или информация могут быть полезны, но если вы спросите, что вам нужно, я могу предоставить их.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Итак, в дополнение к моему комментарию, попробуйте сделать следующее:

Перейдите к контроллеру, где вы имеете дело со своим веб-обзором, и добавьте этот фрагмент кода к этому методу:

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

    // Determine if we want the system to handle it.
    NSURL *url = request.URL;
    if (![url.scheme isEqual:@"http"] && ![url.scheme isEqual:@"https"]) {
        if ([[UIApplication sharedApplication]canOpenURL:url]) {
            [[UIApplication sharedApplication]openURL:url];
            return NO;
        }
    }
    return YES;
}

Затем также обработайте некоторую ошибку, которую можно игнорировать:

- (void)webView:(UIWebView *)wv didFailLoadWithError:(NSError *)error {
    // Ignore NSURLErrorDomain error -999.
    if (error.code == NSURLErrorCancelled) return;

    // Ignore "Fame Load Interrupted" errors. Seen after app store links.
    if (error.code == 102 && [error.domain isEqual:@"WebKitErrorDomain"]) return;

    // Normal error handling…
}

Дайте мне знать, работает ли она для вас.Вы можете прочитать полный пост этого решения здесь .

Удачного кодирования!

0 голосов
/ 19 февраля 2019

Предположительно, если раньше он работал, есть вызовы canOpenUrl: и openUrl: UIApplication (вероятно, вы найдете их в веб-представлении делегата веб-представления: shouldStartLoadWithRequest: navigationType:)

iOS9 внесла изменения в то, какUIApplication canOpenUrl: работает - в основном больше нет.

Если у вас все в порядке с поддержкой только iOS10 - посмотрите на использование openURL: options: завершениеHandler: вместо

https://developer.apple.com/documentation/uikit/uiapplication/1648685-openurl?language=objc

...