WebKit Webview (WKwebview) не может загружать ресурсы за пределами каталога приложения - PullRequest
0 голосов
/ 17 сентября 2018

Поскольку UIWebview устарело, мы начали использовать WKwebview .Будучи Cordova пользователями, мы добавили cordova-plugin-wkwebview-engine, как описано здесь: https://cordova.apache.org/news/2018/08/01/future-cordova-ios-webview.html

1 - Во-первых, наше приложение создается и поставляется с активами (значки, изображения и т. Д.)чей путь начинается с: file:///var/containers/Bundle/Application/[APP_ID]/[APP_NAME]/www/files/project/home/iconA.svg

Эти активы отображаются правильно.

2 - Затем при запуске приложение также проверяет с помощью нашего бэкэнда, доступно ли какое-либо обновление.Если некоторые ресурсы были обновлены, приложение загружает их в каталог данных .Путь к указанному выше активу становится следующим: file:///var/mobile/Containers/Data/Application/[APP_ID]/Library/NoCloud//V1/files/project/home/iconA.svg

... но эти активы не отображаются.

NB1: в обоих случаях ресурс объявляется в фоновом режиме.Свойство image css .

NB2: Мы использовали этот процесс в течение многих лет успешно с прежним UIwebview.

-

На сетевой панели Safari'sвеб-инспектор, ресурс отображается красным, с красным сообщением, указывающим, что произошла ошибка при попытке его загрузки.Нет никакого кода ошибки, ничего технического, чтобы помочь, не более подробно, чем это сообщение ...

Я выполнил некоторые тесты, и кажется, что ресурс присутствует в файловой системе вданный путь.(Используя cordova-plugin-file, я могу вывести содержимое svg).

Итак, первым выводом будет то, что WKwebview не может получить доступ к ресурсам вне каталога приложения?Как кому-нибудь информацию, опытом поделитесь?Кто-нибудь знает обходной путь?

Любая помощь будет очень признательна.

Приветствия из Франции!

1 Ответ

0 голосов
/ 07 ноября 2018

Потребовалось некоторое время, но в конце концов все исправили.Все очень просто, но вам нужно знать, как ... Сначала убедитесь, что вы используете новейшую версию веб-просмотра.В моем случае это 2.2.0

ionic cordova plugin rm cordova-plugin-ionic-webview
ionic cordova plugin add cordova-plugin-ionic-webview@latest

Теперь проверьте ваш код и убедитесь, что все изображения за пределами www имеют правильные ссылки. Не будет работать:

cdvfile://
file://

Будет работать:

http://localhost:8080/
http://localhost:8080/_file_/
absolute paths '/'
and relative paths

Вы должны преобразовать cdvfile: // в файл: //

resolveLocalFileSystemURL('cdvfile://localhost/library-nosync/image.jpg', 
  function(entry) {
    var newname = entry.nativeURL;
  }
);

Вы должны преобразовать файл: // в localhost: 8080.Как это:

var newname = window.Ionic.WebView.convertFileSrc('file:///var/containers/Bundle/Application/[APP_ID]/[APP_NAME]/www/files/project/home/iconA.svg');
...