如何从网页在WKWebView中打开自定义URL,如Apple TV“ videos://”

时间:2019-04-05 15:43:03

标签: ios url wkwebview

我有一个应用程序,它完全由连接到网页的WKWebView组成。在我的网页内,我想有一个打开Apple TV App的按钮。只需在URL上输入“ videos://”,即可在iPhone上的Safari中完成此操作。它会打开AppleTV应用程序或提示您安装它。

当我在使用WKWebView的App中尝试相同的操作时,我得到了: “ WKWebViewVC :: didFailProvisionalNavigation代码:--1002说明:不支持的URL”

我不是要在WKWebView中嵌入AppleTV应用程序,而是要打开它并转到AppleTV应用程序,就像将“ videos://”放入野生动物园一样。

我已经对StackOverflow和Google进行了广泛搜索,找到了有关使用自定义方案处理程序的信息,但失败并出现错误。即使setURLSchemeHandler起作用了,我也不确定在自定义方案处理程序的start方法中放入什么。

webConfiguration.setURLSchemeHandler(CustomSchemeHandler(), forURLScheme: "videos://")

我从setURLSchemeHandler得到的错误是: 'NSInvalidArgumentException',原因:“ videos://'不是有效的URL方案”

如果野生动物园可以解决这个问题,我相信可以通过WKWebView做到。

1 个答案:

答案 0 :(得分:0)

I figured this out. You need to use the WKNavigationDelegate for the WKWebView to handle the request for the "videos://" URL. Here is the method that checks to see if my request contains this URL and if so redirect it to the AppleTV app and do not open in the WKWebView, which cannot handle it.

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {

    if let requestUrlString = navigationAction.request.url?.absoluteString {
        if (requestUrlString.contains("videos://")) {
            if UIApplication.shared.canOpenURL(navigationAction.request.url!) {
                    UIApplication.shared.open(navigationAction.request.url!)
                    decisionHandler(.cancel)
                    return
            }
        }
    }
    decisionHandler(.allow)
}