У меня есть WKWebView, который представляет файл HTML из файлов ресурсов проекта. Наряду с файлами ресурсов существуют файлы CSS и JavaScript для использования в веб-представлении.
Примечание: эти веб-файлы предназначены для скомпилированного веб-приложения React. CSS / JS файлы упоминаются в индексе. html файл, например, <link href="/static/css/styles.css" rel="stylesheet">
и <script src="/static/js/code.js"></script>
, а также встроенный блок JavaScript, например <script> /* some code here */ </script>
Меня попросили перехватить запросы веб-представления и заменить ответ ресурсами в файлах проекта.
Я прочитал и следил за ответом Викаша на запрос перехвата с WKWebView мне удалось увидеть запросы, я получил URL-путь для файлов CSS / JS из запросов, я создал новый URLResponse, но ничто не заставило веб-представление его отображать. Приведенный ниже код взят из другого вопроса SO, который представляет собой расширение нашего ViewController до WKURLSchemeHandler. В функции start urlSchemeTask я получил URL-адрес файла, создал новый URLResponse и поместил его в методы делегата urlSchemeTask, которые ничего не сделали. (отредактировано)
Код ниже взят из другого вопроса SO, который представляет расширение нашего ViewController до WKURLSchemeHandler . В функции start urlSchemeTask
я получил URL-адрес файла, создал новый URLResponse и поместил его в методы делегата urlSchemeTask
, которые просто ничего не сделали.
func webView(_ webView: WKWebView, start urlSchemeTask: WKURLSchemeTask) {
print("Function: \(#function), line: \(#line)")
print("==> \(urlSchemeTask.request.url?.absoluteString ?? "")\n")
// You can find the url pattern by using urlSchemeTask.request.url. and create NSData from your local resource and send the data using 3 delegate method like done below.
// You can also call server api from this native code and return the data to the task.
// You can also cache the data coming from server and use it during offline access of this html.
// When you are returning html the the mime type should be 'text/html'. When you are trying to return Json data then we should change the mime type to 'application/json'.
// For returning json data you need to return NSHTTPURLResponse which has base classs of NSURLResponse with status code 200.
// Handle WKURLSchemeTask delegate methods
let url = changeURLScheme(newScheme: "file", forURL: urlSchemeTask.request.url!)
do {
let data = try Data(contentsOf: url)
urlSchemeTask.didReceive(URLResponse(url: urlSchemeTask.request.url!, mimeType: "text/html", expectedContentLength: data.count, textEncodingName: nil))
urlSchemeTask.didReceive(data)
urlSchemeTask.didFinish()
} catch {
print("Unexpected error when get data from URL: \(url)")
}
}
func webView(_ webView: WKWebView, stop urlSchemeTask: WKURLSchemeTask) {
print("Function: \(#function), line: \(#line)")
print("==> \(urlSchemeTask.request.url?.absoluteString ?? "")\n")
}
Я много искал в Интернете и не смог найти подходящего решения этой проблемы.
Жду новых решений!