Почему вызов API истории DOM приводит к тому, что cordova не загружает изображения в приложении Android? - PullRequest
0 голосов
/ 02 мая 2019

Я использую cordova для создания приложения для Android из веб-приложения SPA, созданного без каких-либо рамок, но ни один из тегов изображений не работает в Android.Все они не могут получить атрибут источника;однако тот же путь будет работать, если он используется в CSS в качестве значения для атрибута URL.Так что, кажется, пути верны.Эти изображения хранятся локально в папке www / img.

Поскольку это приложение SPA, я использую API истории HTML5 для обработки функциональности кнопки возврата в приложении.Я обнаружил, что теги изображений будут работать нормально, пока я не вызову API истории, но после этого теги изображений не будут работать.

Вызовы API истории:

function renderPage(route, back) {
  if (!back) {
    window.history.pushState({}, route, window.location.origin + route);
  }

window.onpopstate = () => {
  renderPage(window.location.pathname, true);
};

Отключениеприведенные выше фрагменты кода приведут к правильной работе тегов изображения.Эта проблема не возникает в браузере.

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Использование абсолютных путей и получение рута с помощью плагина файла cordova, похоже, решает проблему

0 голосов
/ 02 мая 2019

Подумайте о безопасности вашего приложения!

Так что полное цитирование следующее - Оригинальный пост здесь, насколько я понял всю ATS (App Transport Security - iOS 9) вещь, рекомендуемый метод из area28 не должен быть тем, который вы используете внутри приложения.

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key><true/>
</dict>

Это разрешит все внешние запросы к каждому домену, что явно не так, как вы должны его использовать . На мой взгляд, вы должны определите новый внутри вашего info.plist и добавьте в него этот код (для отредактируйте info.plist, вы можете просто использовать обычный текстовый редактор, например, возвышенный текст и т. д.):

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>domain.tld</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
            </dict>
        </dict>
    </dict>

Это разрешит запросы только к указанному вами домену. описан способ, который яблоко представило на WWDC 2015 . Как вы можете видеть на скриншоте, Apple хочет, чтобы пользователи используйте это.

Если вы ничего не указали, вы получите

Не удалось загрузить веб-страницу с ошибкой: ресурс не может быть загружен потому что политика безопасности транспорта приложений требует использования безопасного подключение.

Итак, измените его, и ошибка исчезнет.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...