Кордова - белый экран после всплеска, без исключений в консоли
Я немного ушел от своего приложения в Кордове, но вчера сделал новый клон и заметил, что он получил симптомы "белого экрана смерти" - отобразился экран заставки, программа загрузилась... и то я просто получаю пустой экран. Еще несколько деталей:
- CLI: Cordova 6.1.1, android 5.1.1, ios 4.1.1
- Я не использую никаких специальных плагинов для отображения заставки - всего лишь
<splash>
элементов в моем файле config.xml.
- Это происходит как в iOS, так и в Android, как в локальных сборках, так и при использовании PhoneGap Build (т.е. отладки и выпуска).
- Исключения недостающих ресурсов в консоли отсутствуют, либо в iOS (с использованием инструментов Safari dev), либо в Android (с помощью инструментов Chrome dev).
- Я сделал diff с моей последней известной рабочей сборкой, и там действительно ничего не вышло. Я видел ссылку undefined Underscore, но я поддержал это изменение, и он ничего не разрешил - я думаю, что все равно увижу исключение на консоли.
В последнее время Кордова /PhoneGap сделали что-то подобное? Любые идеи о том, как изолировать это? Я действительно в тупике.
Ответы
Ответ 1
Что ж, это было некрасиво. Оказалось, что было исключение, которое было выброшено слишком рано, чтобы инструменты для браузера были выбраны (Safari, Chrome для iOS и Android соответственно). Исключение появилось, когда я запускал объекты через цель браузера (cordova platform add browser
и т.д.). Поэтому платформа браузера полезна для чего-то, что я думаю.: -)
В моем случае плагин cordova-sqlite-storage сделал нарушение API-интерфейса, которое нарушило код, когда я обновил все. Решение заключалось в том, чтобы подключить плагин к более ранней версии в файле config.xml.
Итак, извлеченные уроки:
- Если вы подозреваете, что при запуске возникает исключение, вы можете использовать платформу браузера, чтобы отслеживать ее.
- Подключите плагины к определенной версии, используя параметр
spec
в файле config.xml. Это сэкономит вам некоторую душевную боль в будущем.
- [еще один вариант из @jcesarmobile, ниже], для обновления в браузере dev инструменты также вышлют исключение. Ницца!
Я вернусь к config.xml и привяжу другие элементы - и сделаю некоторую очистку, как было предложено выше. Еще раз спасибо всем.
Ответ 2
Мне удалось запустить ваше приложение, это шаги, которые я выполнил.
1) Сначала вам нужно объявить предпочтение экрана Splash вместе с расположением плагинов экрана в config.xml. Это то, о чем я думаю, что вам не хватает
<preference
name="SplashScreen"
value="screen" />
<preference
name="AutoHideSplashScreen"
value="true" />
<preference
name="SplashScreenDelay"
value="5000" />
<feature name="SplashScreen" >
<param
name="android-package"
value="org.apache.cordova.splashscreen.SplashScreen" />
<param
name="onload"
value="true" />
</feature>
2) Объявите свои снимки заставки в config.xml, которые вы уже сделали.
Я предлагаю вам сохранить изображения в папках плотности по умолчанию проекта android (ldpi, mdpi, hdpi, xhdpi и т.д.) вместо папки screen/android, поскольку это упростит вашу структуру проекта.
<!-- you can use any density that exists in the Android project -->
<splash
density="land-hdpi"
src="res/drawable-land-hdpi/splash.png" />
<splash
density="land-ldpi"
src="res/drawable-land-ldpi/splash.png" />
<splash
density="land-mdpi"
src="res/drawable-land-mdpi/splash.png" />
<splash
density="land-xhdpi"
src="res/drawable-land-xhdpi/splash.png" />
<splash
density="port-hdpi"
src="res/drawable-hdpi/splash.png" />
<splash
density="port-ldpi"
src="res/drawable-ldpi/splash.png" />
<splash
density="port-mdpi"
src="res/drawable-mdpi/splash.png" />
<splash
density="port-xhdpi"
src="res/drawable-xhdpi/splash.png" />
</platform>
3) Добавьте класс плагинов заставки в свою структуру проекта Android в пакете org.apache.cordova.splashscreen или установите всплеск экрана Cordova плагин
https://cordova.apache.org/docs/en/3.1.0/cordova/splashscreen/splashscreen.html
4) Окончательный и самый важный шаг, который вы должны иметь cordova.js в своей папке www
![Cordova.js в активах]()
И после этого я смог запустить ваше веб-приложение
![введите описание изображения здесь]()
Я разработчик Android. Я думаю, что-то подобное вам нужно сделать для iOS
Ответ 3
У меня была аналогичная проблема при использовании cordova с ember.js. Речь шла о стратегии изменения URL моего приложения.
Посмотрите этот ответ, возможно, это связано с вашей проблемой.
Ответ 4
Вы должны установить плагин splash-screen
для iOS и Android для правильной работы, если вы добавляете всплеск в config.xml
. или без splash-screen
плагина, что вы могли бы попробовать сделать, это создать заставку с HTML, разделить тело на 2 части: содержимое и логин. Затем вы устанавливаете отображение стиля контента: none. Когда приложение будет загружено, вы просто установите экран загрузки экрана: нет и экран содержимого: блок или все, что вы хотите
И вы пропустили ниже предпочтений в своем config.xml
<preference name="SplashScreenDelay" value="3000" />
<preference name="SplashMaintainAspectRatio" value="true|false" />
<preference name="SplashShowOnlyFirstTime" value="true|false" />
Ответ 5
Попробуйте добавить это предпочтение к вашему config.xml, возможно, это проблема
<preference name="AutoHideSplashScreen" value="true"/>
Ответ 6
Единственное исправление, которое сработало для меня, было найдено здесь:
http://www.codingandclimbing.co.uk/blog/ionic-2-fix-splash-screen-white-screen-issue-14
в основном отредактируйте файл config.xml. Настройка заставки должна выглядеть так:
<preference name="ShowSplashScreen" value="true"/>
<preference name="SplashScreen" value="screen"/>
<preference name="SplashScreenDelay" value="30000"/>
<preference name="AutoHideSplashScreen" value="false"/>
<preference name="SplashShowOnlyFirstTime" value="false"/>
<preference name="FadeSplashScreen" value="false"/>
<feature name="SplashScreen">
<param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen"/>
</feature>
Ответ 7
Отсутствие тега <meta http-equiv="Content-Security-Policy">
на head
вызвало белый экран в моем случае.
Ответ 8
1 → Если вы подозреваете, что во время запуска выбрано исключение, вы можете использовать платформу браузера для ее отслеживания.
2 → Подключите плагины к определенной версии, используя параметр spec в файле config.xml. Это сэкономит вам некоторую душевную боль в будущем.
Ответ 9
В моем случае я случайно прокомментировал определение состояния в app.js.
Ответ 10
Моя проблема была в ES6, она отлично работает на iPhone и Android 6, но она не работает с Android 4 и 5.
Ответ 11
Я добавил эти строки в config.xml
<preference name="SplashScreen" value="screen" />
<preference name="SplashScreenDelay" value="6000" />
У меня также есть черный экран, когда я даю screendelay как 3000.so я изменился на 6000.Я думаю, что cordova возьму некоторые, чтобы загрузить js, css и файлы изображений.
Ответ 12
В моем случае я помещаю ALERT перед тем, как первый экран все еще установлен.