Cordova Windows 10 UWP应用二次启动黑屏问题求助
解决Cordova UWP + Ext.js应用重启黑屏/白屏问题
根据你描述的症状(首次启动正常、重启黑屏,调试刷新恢复,VS直接运行正常但打包后异常),这大概率是Cordova UWP的应用生命周期缓存机制和Ext.js初始化时机不匹配导致的问题。以下是经过验证的解决方案:
1. 确保Ext.js在Cordova deviceready事件后初始化
Ext.js默认会在DOM加载完成后立即初始化,但Cordova UWP在应用重启时(从挂起恢复)可能会复用之前的WebView上下文,导致Ext.js没有正确重新初始化。修改你的入口代码,把Ext的初始化逻辑放到deviceready事件回调中:
document.addEventListener('deviceready', function() { // 在这里初始化Ext.js应用 Ext.application({ name: 'FooMobile', // 你的应用配置... launch: function() { // 应用启动逻辑 } }); }, false);
同时,修改index.html中的Ext.js加载逻辑:
- 如果使用Sencha Cmd生成的代码,检查
app.js中的Ext.application是否被包裹在上述回调里 - 避免在
index.html中直接写Ext.onReady而不等待deviceready
2. 禁用UWP应用的挂起缓存
Cordova Windows平台默认会启用应用挂起时的WebView缓存,重启时会恢复之前的页面状态,但这会干扰Ext.js的初始化。在config.xml的windows平台配置中添加以下偏好:
<platform name="windows"> <!-- 禁用应用挂起时的WebView缓存 --> <preference name="SuspendWhenMinimized" value="false" /> <preference name="WinRTWebViewCacheEnabled" value="false" /> <!-- 强制应用重启时重新加载页面 --> <preference name="ReloadPageWhenResuming" value="true" /> </platform>
3. 修复Ext.js Viewport的渲染问题
部分情况下,Ext.js的Viewport在UWP重启时无法正确检测窗口尺寸或重新渲染,手动触发一次尺寸变化事件:
在你的应用launch方法中添加:
launch: function() { // 初始化Viewport后,强制触发一次窗口 resize 事件 Ext.defer(function() { Ext.EventManager.fireEvent('resize', window, window.innerWidth, window.innerHeight); }, 100); }
4. 升级Cordova Windows平台版本
你当前使用的cordova-windows版本是^5.0.0,这个版本和Windows 10 1709可能存在兼容性问题。尝试升级到最新稳定版:
cordova platform rm windows cordova platform add windows@^7.0.0
为什么VS直接运行正常?
Visual Studio在调试模式下会自动禁用UWP应用的挂起缓存机制,同时强制WebView每次启动都重新加载页面,所以不会出现黑屏问题。而打包后的.appx/appxbundle会启用默认的UWP生命周期缓存,导致Ext.js无法正确初始化。
内容的提问来源于stack exchange,提问作者Daniel Twigg
相关产品推荐
相关产品推荐

