Cordova打包后白屏,控制台报错找不到cordova.js怎么办?
我用Cordova开发了一个简单的App,本地浏览器测试没问题,但打包成Android APK安装后打开就是白屏。
连上Chrome DevTools看了下,控制台报错:Uncaught ReferenceError: cordova is not defined,而且network里根本没加载到cordova.js这个文件。明明在index.html里写了引用啊,路径是<script src="cordova.js"></script>,这不应该自动注入吗?
试过重新cordova platform remove android再加回来,也clean过项目,还是不行。是不是哪里配置漏了?
先说重点,
cordova.js这玩意儿确实会自动注入,但前提是你的项目结构和配置得对。它不是你手动放进去的,是打包时 Cordova 自动往platforms/android/app/src/main/assets/www/目录里塞的。前端这块排查起来也不难,几个常见坑你对照下:
第一个,路径问题。你的引用写法
<script src="cordova.js"></script>是对的,千万别手贱写成./cordova.js或者/cordova.js,加个斜杠就找不到人了。相对路径和绝对路径在这里区别很大,打包后的文件结构跟本地开发不一样。第二个,index.html 的位置。确认你的 index.html 是在项目根目录的
www文件夹里,不是别的什么地方。而且config.xml里面的<content src="index.html" />要跟实际文件名对应上,大小写都得一致,Linux 环境下可是区分大小写的。第三个,CSP策略。这个坑死人,很多人不知道。检查一下你的 index.html 头部有没有
<meta http-equiv="Content-Security-Policy">标签,如果配置不当会直接拦截 cordova.js 的加载。可以先临时删掉这行测试一下,确认是这个问题再慢慢调策略。第四个,打包不完整。有时候
cordova platform remove android再 add 回来确实能解决一些玄学问题,但前提是你得确保 remove 干净了。直接删掉platforms和plugins两个目录,然后重新跑:第五个,看看打包产物。打包完成后去
platforms/android/app/src/main/assets/www/目录瞅一眼,cordova.js 要是在那里,说明注入成功了。要是没有,那就是 Cordova 版本或者环境有问题,建议升级或者重装 Cordova CLI。最后提一句,本地浏览器测试时 cordova.js 找不到是正常的,毕竟浏览器环境没有 Cordova 运行时。你可以加个判断兼容一下:
基本就这些,90%的情况都是路径或者CSP的问题,仔细排查下。