最近作了一个webapp项目,混合式开发,外部原生,内部webview嵌套H5页面。前端方面采用了vue开发,适配采用的是flexible+rem作的适配。原本一切都很好,但是吧,领导说客户有的年纪大 ,看不清字体,但愿网页字体能够跟随系统字号大小变化。当时内心真是...,然无奈只能想办法解决问题,网上搜罗一圈都是禁止内部跟随系统字号变化,看来只能本身搞了。html
最简单的让原生进行操做,内部不作控制,外部放大,里面本身适应。可是有问题,文本字体能够放大,有的输入框和输入框的内容却没有放大,故淘汰该方案。前端
外部原生webview让里面的放大缩小不跟随系统变化,内部本身控制。和安卓同事商量后,他去获取系统放大的参数,而后将参数传递给内部webapp,内部来自定义控制缩放。
代码以下:vue
setScaleFont(){ let fontScale=1; let scaleFontSize; let initFontSize; fontScale=parseFloat(window._nativeMe.getFontScale()); console.log(`缩放比例:${fontScale}`); let docHtml=document.getElementsByTagName("html")[0]; initFontSize=this.getStyle(docHtml,'fontSize').split('px')[0]; scaleFontSize=fontScale*initFontSize;//1-1.4等比缩放 docHtml.style.fontSize=scaleFontSize +'px'; }, getStyle(obj, name){ if(window.currentStyle){ return obj.currentStyle[name]; } else{ return getComputedStyle(obj, false)[name]; } }
先获取到初始的缩放比例,而后根据安卓原生传入的缩放比例改写html标签上的fontsize大小,因为采用了rem适配,自会根据根元素大小进行适配。这种方案必须确保先让flexible的适配先执行,而后判断是不是安卓,若是是安卓就执行setScaleFont方法才有效,不然会被flexible里面的方法覆盖掉,形成页面先放大后缩小或者先缩小后放大的现象。web
如上图,我是注释掉了这段代码,否则就会产生上述放大缩小的现象。安全
该种方法也只能在安卓上有效,苹果因为安全权限的问题没法获取系统字体的缩放比例,故没法调整,若是有大神知道在苹果上如何操做或者有别的更好办法,请告知,不胜感激。app