WKWebView перехватывает запросы локального файла
У меня есть WKWebView в моем приложении iOS 11+, где мне нужно загрузить пользовательский HTML из локального HTML-кода в памяти. Я могу добиться этого, используяwebView.loadHTMLString
или webview.load(data)
, который работает нормально.
Этот HTML-код ссылается на некоторые необходимые файлы.js/.css/.png. Для обычных запросов веб-URL WKWebView просто делает это на лету, загружая недостающие файлы. Но в этом случае мне нужно перехватить эти запросы и предоставить содержимое файла, так как некоторые из них должны быть динамически сгенерированы. Таким образом, файлы.css и т. Д., Которые мне нужно обслуживать, физически не представлены как локальные файлы.
Я думал, что это просто вопрос реализации decidePolicyFor
методы WKNavigationDelegate
протокол, но по какой-то причине он не запускается для локальных подзапросов, так как я могу это сделать?
Я также попытался сохранить HTML как локальный временный файл и загрузить его с помощью webView.load(URLRequest)
, но это тоже не запускает делегата. Если это был веб-адрес, он срабатывает нормально.
1 ответ
Допустим, вы визуализируете fullIosAppPath/page.html
в котором есть текст вроде <img src="folder/1.png">
.
В таком случае вам понадобится файлfullIosAppPath/folder/1.png
в папке вашего приложения. ВWKWebView
загрузит 1.png
без перехвата - он просто отобразит изображение.
Таким образом, вы можете проанализировать HTML-файл перед его рендерингом и сгенерировать / загрузить требуемые ресурсы, такие как 1.png
. Вы можете разобрать HTML-файл с помощью таких фреймворков, как Kanna, или написать простой парсер самостоятельно.