移动端开发基础【13】uni-app跨端开发注意事项

uni-app跨端开发注意事项

  1. H5正常但App异常的可能性

(1) css异常:

(2) 不支持的选择器非H5端不支持 * 选择器;body的元素选择器请改为page,同样,div和ul和li等改为view、span和font改为text、a改为navigator、img改为image等等。

(3) webview浏览器兼容性。vue页面在App端是被系统的webview渲染的(不是手机自带浏览器,是rom的webview),在较老的手机上,比如Android4.4、5.0或iOS8,很多css是不支持的,所以不要使用太新的css,会导致界面异常。

注意这不意味着不能使用flex,Android4.4也支持flex,只是不要使用太新的css。

可以找Android4.4手机或使用pc模拟器实际测试下,大多数国产Android模拟器都是4.4或5.0。

小程序不存在此情况。所以如果你的H5和小程序界面正常,而App界面异常,大多是因为css兼容性。解决这类问题,可以在caniuse查询,也可以使用一个较低版本的chrome浏览器在H5端测试。

Android4.4对应的webview是chrome37,如找不到老版chrome,也可以下载老版HBuilder(在HBuilderX下载页面底部有“上一代HBuilder下载”),在老HBuilder的右上角边改边看模式里是chrome37内核,可以把uni-app的H5版运行起来,将url粘贴到边改边看的浏览器中,点右键可以审查元素,排查不支持的css。

(4) 原生组件层级问题。H5没有原生组件概念问题,非H5端有原生组件并引发了原生组件层级高于前端组件的概念,要遮挡video、map等原生组件,可以使用cover-view组件。

(5) 使用了非H5端不支持的API,比如document、xmlhttp、cookie、window、location、navigator、localstorage、websql、indexdb、webgl等对象。如果你的代码没有直接使用这些,那很可能是引入的三方库使用了这些。如果是后者,去插件市场搜索替代方案。要知道非H5端的js是运行在一个独立的js core或v8下,并不是运行在浏览器里。

(6) 使用了非H5端不支持的vue语法,比如v-html指令、受小程序自定义组件限制的写法.

(7) 引用组件时,不要在引用组件的地方,也就是在组件属性上直接写 style="xx",要在组件内部写样式。

(8) 不能使用url(//alicdn.net)等路径,如果要使用,改为url(https://alicdn.net),因为在App端//是file协议。

(9)很多人在H5端联网时使用本地测试服务地址(localhost或127.0.0.1),这样的联网地址在手机端肯定是无法访问的,它会提示你使用手机可以访问的IP进行联网。

(10) 组件和页面样式相互影响。非H5端默认并没有启用 scoped,如果需要隔离组件样式可以在 style 标签增加 scoped 属性,H5端为了隔离页面间的样式默认启用了 scoped。

  1. H5正常但小程序异常的可能性

(1) 使用了非H5端不支持的API,比如document、window、navigator、cookie,或者引入的三方库使用了这些不支持的API,此时要更换适合跨端的三方库。

(2) 使用了非H5端不支持的vue语法,比如v-html指令,在h5和app-vue(v3编译模式)均支持,但小程序不支持。

(3) 小程序要求连接的网址都要配白名单

  1. 小程序正常但App异常的可能性

vue页面在App端的渲染引擎默认是系统webview,但要注意的是,它不是手机自带的浏览器,而是rom的webview。在较老的手机上,比如Android4.4、5.0或iOS8,一些新出的css语法是不支持的。但这并不是说不能使用flex,因为Android4.4也支持flex,只是不要使用太新的css。可以找Android4.4手机或使用pc模拟器实际测试下,大多数国产Android模拟器都是4.4或5.0。

小程序不存在浏览器兼容问题,它内置了几十M自己的定制webview。所以如果你的H5和小程序界面正常,而App界面异常,大多是因为css兼容性。

我们可以使用一下几种方法来解决这类CSS兼容性的问题:

(1) 放弃老款手机支持

(2) 不用使用太新的css语法,可以在caniuse查询

(3)从 uni-app 2.5.3 起,Android端支持引入腾讯x5浏览器内核,可以抹平低端Android的浏览器兼容性问题。

  1. 小程序或App正常,但H5异常的可能性

(1)在 uni-app 2.4.7 以前,H5端不支持微信小程序自定义组件,即wxcomponets下的组件,它可能产生兼容问题。但是,从 2.4.7 起,H5也支持微信自定义组件,不再存在这方面兼容问题。

(2)App端使用了App特有的API和功能,比如plus、Native.js、subNVue、原生插件等

(4)使用了小程序专用的功能,比如微信卡卷、小程序插件、微信小程序云开发。对于云开发,建议使用可跨端的uniCloud。

  1. App正常,小程序、H5异常的可能性

使用了App端特有的plus、Native.js、原生插件等功能。

 

移动端开发基础【13】uni-app跨端开发注意事项

上一篇:.net core 静态类获取appsettings


下一篇:ZT 理解 Android 上的安全性