Skip to content

Instantly share code, notes, and snippets.

@MarcoEidinger
Created August 24, 2021 00:17
Show Gist options
  • Save MarcoEidinger/6f15e79cded4945bf7306d1c8a6937be to your computer and use it in GitHub Desktop.
Save MarcoEidinger/6f15e79cded4945bf7306d1c8a6937be to your computer and use it in GitHub Desktop.
Example for WKURLSchemeHandler implementation to replace custom url scheme with "https"
class MySchemeHandler: NSObject, WKURLSchemeHandler {
func webView(_ webView: WKWebView, start urlSchemeTask: WKURLSchemeTask) {
print("started for \(urlSchemeTask.request.url?.absoluteString)")
guard let url = urlSchemeTask.request.url else { return }
var components = URLComponents(url: url, resolvingAgainstBaseURL: true)
components?.scheme = "https"
guard let finalUrl = components?.url else { return }
print("proxy to \(finalUrl.absoluteString)")
let task = URLSession.shared.dataTask(with: URLRequest(url: finalUrl)) { receivedData, urlresponse, error in
guard let response = urlresponse, let data = receivedData else { urlSchemeTask.didFinish(); return }
urlSchemeTask.didReceive(response)
urlSchemeTask.didReceive(data)
urlSchemeTask.didFinish()
print("didFinish \(urlSchemeTask.request.url?.absoluteString)")
}
task.resume()
}
func webView(_ webView: WKWebView, stop urlSchemeTask: WKURLSchemeTask) {
print("stopped")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment