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, или написать простой парсер самостоятельно.

Другие вопросы по тегам