Cordova - 飞溅后的白色屏幕,在控制台中没有例外

时间:2016-04-11 16:23:05

标签: android ios cordova

我已经离开了我的Cordova应用程序了一段时间,但昨天刚刚做了一个新的克隆,发现它有“死亡的白屏”症状 - 启动画面显示,程序加载...和然后我得到一个空白的屏幕。更多细节:

  • CLI:Cordova 6.1.1,android 5.1.1,ios 4.1.1
  • 我没有使用任何特殊的插件来显示启动画面 - 只有my config.xml file中的<splash>元素。
  • 在iOS和Android上都会发生这种情况,包括本地版本和使用PhoneGap Build(即调试和发布)。
  • 在iOS中(使用Safari的开发工具)或Android(使用Chrome的开发工具),控制台中没有丢失资源的例外。
  • 我做了一个diff with my last known working build,而且真的没有什么可以突然出现。我看到了一个未定义的Underscore引用,但是我支持该更改并且它没有解决任何问题 - 我认为无论如何我都会在控制台中看到异常。

Cordova / PhoneGap最近有没有做过可能导致这种情况的事情?关于如何隔离这个的任何想法?我真的很难过。

14 个答案:

答案 0 :(得分:21)

那很难看。事实证明,被抛出的异常,它只是被浏览器开发工具提起太早了(分别是Safari,适用于iOS和Android的Chrome)。当我通过浏览器目标(cordova platform add browser等)运行时,异常确实出现了。所以浏览器平台对于我猜的东西很有用。 : - )

就我而言,cordova-sqlite-storage插件在我更新所有内容时突破了API更改。解决方案是将插件固定到config.xml文件中的早期版本。

所以,经验教训:

  • 如果您怀疑在启动过程中发生了异常,您可以使用浏览器平台对其进行追踪。
  • 使用config.xml中的spec参数将插件固定到特定版本。这将为你节省一些心痛。
  • [来自@jcesarmobile的另一个选项,下面]在浏览器开发工具中点击刷新也将触发异常。太好了!

我将回到config.xml并固定其他项目 - 并按照上面的建议进行一些清理。再次感谢大家。

答案 1 :(得分:6)

我管理你的应用程序这是我遵循的步骤。

1)首先,您需要在 config.xml 中声明Splash屏幕首选项以及启动画面插件位置。这就是我认为你缺少的东西

<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等)中,而不是屏幕/ 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)将Splash screen plugin class添加到 org.apache.cordova.splashscreen 包下的android项目结构中,或者安装启动画面Cordova插件

https://cordova.apache.org/docs/en/3.1.0/cordova/splashscreen/splashscreen.html

4)最后也是最重要的一步,你必须在你的www文件夹中有cordova.js

Cordova.js in assets

之后我能够运行您的网络应用

enter image description here

我是android开发人员我猜你可能需要为iOS做类似的东西

答案 2 :(得分:2)

使用带有ember.js的cordova时遇到了类似的问题。这是关于我的应用程序的网址更改策略。

查看this answer,它可能与您的问题有关。

答案 3 :(得分:2)

如果要在splash-screen中添加启动功能,则应为iOS和Android安装config.xml插件才能正常工作。或者没有splash-screen插件你可以尝试做的是制作一个带有HTML的闪屏,将你的身体分为两部分:内容和登录。然后设置内容样式display:none。当应用程序完成加载后,您只需设置加载屏幕显示:无和内容屏幕显示:阻止或任何您想要的

您在config.xml

中错过了以下偏好设置
<preference name="SplashScreenDelay" value="3000" />
<preference name="SplashMaintainAspectRatio" value="true|false" />
<preference name="SplashShowOnlyFirstTime" value="true|false" />

答案 4 :(得分:2)

尝试将此首选项添加到config.xml,也许这就是问题

<preference name="AutoHideSplashScreen" value="true"/>

答案 5 :(得分:1)

这里找到了唯一对我有用的解决方法: 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>

答案 6 :(得分:1)

<meta http-equiv="Content-Security-Policy">上遗失的head标记导致我的情况出现白屏。

答案 7 :(得分:1)

我在config.xml中添加了这些行

<preference name="SplashScreen" value="screen" />
<preference name="SplashScreenDelay" value="6000" />

当我将screendelay设为3000时,我也有黑屏。所以我改为6000.我认为cordova需要一些时间来加载你的js,css和图像文件。

答案 8 :(得分:1)

在我的情况下,我在第一个屏幕仍然安装之前放了ALERT。

答案 9 :(得分:0)

1&GT;&GT;如果您怀疑在启动期间抛出了异常,则可以使用浏览器平台对其进行跟踪。 2&gt;&gt;使用config.xml中的spec参数将插件固定到特定版本。这将为您节省一些心痛。

答案 10 :(得分:0)

就我而言,我不小心在app.js中评论了州定义。

答案 11 :(得分:0)

我的问题出在ES6上,它在iPhone和Android 6上完美运行,但它不适用于Android 4和5。

答案 12 :(得分:0)

我有这种情况并解决了它。

就我而言,它与此代码类似:

$scope.images.push({ id: i, src: "http://placehold.it/50x50" , pstb, trno});

以上代码在Android 7.0上运行良好,但在android 4.4.4上启动后只有白屏?

改为:

$scope.images.push({ id: i, src: "http://placehold.it/50x50", pstb: pstb, trno: trno});

在所有设备上运行(至少在我的所有设备上运行)

答案 13 :(得分:0)

并不是真正的答案,但我将其添加到此处的潜在实验列表中-我从未弄清楚这是怎么发生的,但是通过删除整个platforms文件夹和{{1} },然后重新添加平台。