- Похоже, что в настоящее время WKWebView принимает только протокол
https
. Если у вас просто http
, WKWebView пожалуется на небезопасный протокол и не откроется.
После того, как я изменил http-s на https-s, страницы открылись, но не страницы AppStore. Это приводит к другой проблеме.
Когда URL-адрес начинается с
https://apps.apple.com/...
, iOS (но не macOS) перенаправляет его на
itms-appss://apps.apple.com/...
для открытия в приложении AppStore, в результате чего WKWebView выдает ошибку:
Redirection to URL with a scheme that is not HTTP(S)
. Аналогичная проблема с URL-адресами
mailto
.
Чтобы обойти эти проблемы, я изменил код на следующий:
extension InformationPageController: WKNavigationDelegate {
static let disallowedUrlPrefixes = ["https://apps.apple.com", "mailto:"]
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: ((WKNavigationActionPolicy) -> Void)) {
var policy = WKNavigationActionPolicy.allow
if navigationAction.navigationType == .linkActivated,
let url = navigationAction.request.url {
let urlString = url.absoluteString
if InformationPageController.disallowedUrlPrefixes.first(where:{urlString.starts(with: $0)}) != nil {
UIApplication.shared.openURL(url)
policy = .cancel
}
}
decisionHandler(policy)
}
}
Теперь «проблемные» страницы открываются с помощью внешнего браузера, все остальные открываются в WKWebView. К сожалению, это лучшее, что я могу сейчас придумать.