Предотвращение открытия универсальных ссылок в `WKWebView` /` UIWebView`

ios uiwebview wkwebview

4248 просмотра

4 ответа

16388 Репутация автора

Когда пользователь нажмет на универсальную ссылку WKWebView, откроется соответствующее приложение (если оно установлено).

Это описано в Руководстве по программированию Apple Search

Если вы создаете экземпляр объекта SFSafariViewController, WKWebView или UIWebView для обработки универсальной ссылки, iOS открывает ваш веб-сайт в Safari вместо того, чтобы открывать ваше приложение. Однако если пользователь нажимает универсальную ссылку из встроенного объекта SFSafariViewController, WKWebView или UIWebView, iOS открывает ваше приложение.

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

Как предотвратить открытие универсальной ссылки? Или я могу знать, может ли URL обрабатываться другими приложениями?

Автор: samwize Источник Размещён: 19.07.2016 05:57

Ответы (4)


2 плюса

180 Репутация автора

+ [LSAppLink openWithURL: completeHandler:] вот как универсальная ссылка открывает соответствующее приложение. Вы можете обмениваться его реализациями с самим методом, но будьте осторожны, это частный API.

Вы можете проверить файл заголовка LSAppLink здесь

Автор: None Размещён: 08.06.2017 07:10

10 плюса

180 Репутация автора

Решение

Исходный код для WebKit:

static const WKNavigationActionPolicy WK_API_AVAILABLE(macosx(10.11), ios(9.0)) _WKNavigationActionPolicyAllowWithoutTryingAppLink = (WKNavigationActionPolicy)(WKNavigationActionPolicyAllow + 2);

если вы используете WKWebView, просто используйте WKNavigationActionPolicyAllow+ 2 вместоWKNavigationActionPolicyAllow

Автор: None Размещён: 06.07.2017 07:49

2 плюса

87 Репутация автора

Основываясь на ответе @none, вот пример для Swift 4

Я проверил это, и это работает!

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    decisionHandler(WKNavigationActionPolicy(rawValue: WKNavigationActionPolicy.allow.rawValue + 2)!)
}
Автор: 徐竟峰 Размещён: 20.10.2017 06:17

1 плюс

525 Репутация автора

Вы можете попробовать это?

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    decisionHandler(WKNavigationActionPolicy(rawValue: WKNavigationActionPolicy.allow.rawValue + 2)!)
}
Автор: Karthik Murugesan Размещён: 26.09.2018 12:03
32x32