禁用微信 webview 调整字体大小

     原文:http://www.grycheng.com/?p=2411  html

     微信 webview 内置了调整字体大小的功能,对于网页的可用性来讲是一个很实用的功能。一些网页的字体设置太小致使用户看不清文字,调整字体大小便可解决这个问题。web

  

禁用微信 webview 调整字体大小

 

  可是对于一些追求显示效果的移动端页面来讲,字体大小的调整可能会致使部分文字没法显示甚至是页面布局出错。如图,大众点评案例。微信

禁用微信 webview 调整字体大小

 

  解决方案布局

  微信的 iOS 版的调整字体大小使用的是经过给 body 设置 -webkit-text-size-adjust:120% 属性实现的,Android 则是用过 Java 调用 webview 的 API 设置字体大小。测试

  由于这两个系统实现调整字体大小的原理不一样,因此须要两种方法来限制微信对网页字体大小的调整。字体

  iOSspa

  在 iOS 下,对网页的 body 元素设置 -webkit-text-size-adjust: 100% !important; 能够覆盖掉微信的样式。code

 

1 body {
2 -webkit-text-size-adjust: 100% !important;
3 }

 

  Androidhtm

  在 Android 下,须要经过 WeixinJSBridge 对象将网页的字体大小设置为默认大小,而且重写设置字体大小的方法,让用户不能在该网页下设置字体大小。对象

  

(function() {

  if (typeof WeixinJSBridge == "object" && typeof WeixinJSBridge.invoke == "function") {

  handleFontSize();

  } else {

  if (document.addEventListener) {

  document.addEventListener("WeixinJSBridgeReady", handleFontSize, false);

  } else if (document.attachEvent) {

  document.attachEvent("WeixinJSBridgeReady", handleFontSize);

  document.attachEvent("onWeixinJSBridgeReady", handleFontSize);

  }

  }

  function handleFontSize() {

  // 设置网页字体为默认大小

  WeixinJSBridge.invoke('setFontSizeCallback', { 'fontSize' : 0 });

  // 重写设置网页字体大小的事件

  WeixinJSBridge.on('menu:setfont', function() {

  WeixinJSBridge.invoke('setFontSizeCallback', { 'fontSize' : 0 });

  });

  }

  })();

 

  注意:若是用户以前已经设置过了字体大小,访问网页时会先看到字体被放大后的效果再恢复正常,由于在 WeixinJSBridge 对象初始化完成以后才能经过 WeixinJSBridge 对象的方法设置为默认大小。

  Android 延迟生效问题录屏:

  

禁用微信 webview 调整字体大小

 

  测试用例

  http://www.grycheng.com/case/resize_font.html

  总结

  因为实现原理的不一样,目前的解决方案只在 iOS 上表现完美,Android 下仍然有延迟生效问题。若是你有更好的解决方案,欢迎在评论里补充。

相关文章
相关标签/搜索