移动端Web兼容问题随记

476 阅读2分钟

本文引言

目前市场上主流APP分为三种:原生Native App、Web APP、Hybrid APP。

  • Native App原生功能最齐全,性能最佳,但是开发周期长成本高,IOS与Android代码需要各一套。
  • Web APP即是H5开发实现最方便,但是不能调用硬件和离线存储,体验和性能较差。
  • Hybrid APP混合式开发,做一套IOS和Android的外壳,套上H5的界面,又能快速开发公用界面又可以调用底层,齐活了。

WebView

混合式开发基于WebView模式进行开发,内置了一个的高性能浏览器。

  • 安卓4.4.W以前WebKit
  • 安卓4.4.W开始安卓内置的WebKit改为Chromium WebKit
  • IOS系统内置浏览器Safari内核也为Chromium WebKit

兼容性随记

  1. iframe

  iframe 元素会创建包含另外一个文档的内联框架,就允许访问项目外的链接。 iframe标签在safari中会作为一个新的独立的页面 ios 特性在app中监听到有新的链接加载,ios会自动打开Safari浏览器加载新页面(跳出app)。 这里为了阻止浏览器默认事件,使用window.location.href = src来阻止Safari浏览器的弹出

2. position:fixed属性

  fixed属性存在一定的兼容性问题,在android和PC端中表现正常但在IOS中表现的有一点点坑,比如IOS5以上才支持,就算支持了定位可能会失效,有效果了也可能出BUG,比如原生IOS的滑动事件,滑动时有惯性回弹,但是配合第二条的fixed属性,可能导致整个原本被固定住的元素也被强制的滑动,尽量的使用absolute来替代fixed

  1. 后退时页面不能刷新

  无论是window.history.back()还是window.history.go(-1) 后退的时候都是直接从浏览器中读取缓存,而不是重新加载这个页面和这个页面的事件。为了获取上一个页面,可以使用window.location.reload()重新加载这个页面,也可以直接指定 location.href = url 指定一个url进行跳转