Когда я ищу google и нажимаю Etsy.com для exmaple, WKWebView перенаправляет меня на приложение Etsy, установленное на моем iPhone. Как я могу отключить это поведение? Я хочу, чтобы WKWebView перенаправлял меня на мобильный сайт etsy.com. Я использую быстро.
Отключить WKWebView для открытия ссылок для перенаправления на приложения, установленные на моем iPhone
Ответ 1
К сожалению, WKWebView
не отправляет URL-адреса с настраиваемыми схемами обратно в ваше приложение для автоматической обработки.
Если вы попробуете это без специальной обработки, это будет выглядеть так, как ваш веб-вид зависает после того, как пользователь будет аутентифицироваться с помощью стороннего сервиса, и вы никогда не получите обратный вызов. Вы можете попробовать использовать URI переадресации со стандартной схемой http или https, но тогда WKWebView
просто попытается загрузить ее, а не направлять ее из веб-представления в ваше родное приложение для обработки.
Чтобы обработать перенаправление, вам нужно реализовать decidePolicyForNavigationAction
в WebPolicyDelegate
вашего WKWebView
, чтобы обнаружить настраиваемую схему URL и перенаправить ее в ваше приложение для обработки:
func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: ((WKNavigationActionPolicy) -> Void)) {
print("webView:\(webView) decidePolicyForNavigationAction:\(navigationAction) decisionHandler:\(decisionHandler)")
let app = UIApplication.sharedApplication()
let url = navigationAction.request.URL
let myScheme: NSString = "https"
if (url!.scheme == myScheme) && app.canOpenURL(url!) {
print("redirect detected..")
// intercepting redirect, do whatever you want
app.openURL(url!) // open the original url
decisionHandler(.Cancel)
return
}
decisionHandler(.Allow)
}
Вы можете найти подробную информацию здесь
Ответ 2
Я установил приложение Etsy и подтвердил, что поиск "etsy" в Safari и нажатие первого результата (etsy.com) запустит приложение Etsy.
Я создал тестовое приложение "Single View" в Xcode и просто добавил строки ниже в ViewController
viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
let webView = WKWebView(frame:view.bounds, configuration: WKWebViewConfiguration())
view.addSubview(webView)
webView.loadRequest(NSURLRequest(URL: NSURL(string: "https://www.google.com")!))
}
после поиска etsy и нажатия на первый результат, он берет меня на etsy.com в моем тестовом приложении (не переходит в приложение Etsy).
Вы сделали что-то еще в своем коде, что может заставить WKWebView разрешать перенаправления?
Ответ 3
В нормальных условиях WKWebView не должен открывать стороннее приложение вместо того, чтобы идти на веб-сайт, но я знаю 2 исключения
- Если вы явно ввели некоторый код в обработчик
WKNavigationDelegate
, чтобы открыть стороннее приложение - Если iOS работает некорректно (перезапустите устройство для исправления) - кажется, есть ошибка, которая иногда создает поведение, которое вы описываете (соблюдается в iOS10.2)