webapp字号大小跟随系统字号大小缩放

最近作了一个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

相关文章
相关标签/搜索