uni-app离线打包在小米1设备上跨域ajax请求失败?
uni-app离线打包在小米1设备上跨域ajax请求失败?
问题描述
离线打包的apk,在其他手机上都能正常使用,安装到小米1上,(内核版本android 4.1)则ajax全部失效了。
查看了logcat,提示XMLHttpRequest不允许跨域
xmlhttprequest cannot load no ‘access-control-allow-origin’
而通过Hbuilder 云端打包的程序,就能在这台机器上跑起来。
因为要用到h5+的插件,以runtime方式集成的。在其他机器上都好使,为什么到了这边出错呢。
感觉应该是离线打包时,还有某些权限或者配置没有写对把,但是查了很多官方文档都没提及此问题,望得到管理员解答。
非常感谢!
更多关于uni-app离线打包在小米1设备上跨域ajax请求失败?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
貌似知道问题了,给大家参考
但感觉是h5+的bug呢?
在plus状态下,本该自动检测是plus状态(我的ajax代码也是放在plusready之后运行的),则ajax实则不调用浏览器本身的xhr,而是使用native接口去通过sdk内封装的网络请求类去请求跨域内容。
但在我上面说的情况中,程序没有检测出或者js的xhr对象覆盖失败,则mui.ajax又调用的是浏览器本身的xhr,则出现无法跨域问题。
解决方案,
在ready之后,手动将xhr对象覆盖一次,保证一定是以native xhr模式运行。(这样覆盖代码加上之后,则应用的兼容性变差,多端发布时留坑了)
在应用启动时,就覆盖对象
mui.ajaxSettings.xhr=function(){
return new plus.net.XMLHttpRequest();
}
更多关于uni-app离线打包在小米1设备上跨域ajax请求失败?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
@DCloud_Android_磊子 报告一个Bug,检测是否是在app中运行的机制,在android 4.1.1 小米1的ROM上可能有问题。
根据描述,这很可能是小米1设备(Android 4.1)的WebView内核兼容性问题导致的跨域限制。以下是关键点分析:
-
云端打包正常而离线打包失败,说明是配置差异导致。云端打包可能自动处理了WebView兼容性配置。
-
解决方案建议:
- 在manifest.json中配置最低API级别为16(Android 4.1)
- 检查是否使用了X5内核(腾讯浏览服务),可尝试集成X5内核提升兼容性
- 确保AndroidManifest.xml中已添加网络权限:
<uses-permission android:name="android.permission.INTERNET"/>