react 移動端 兼容性問題和一些小細節


react 移動端 兼容性問題和一些小細節

  • 使用 ES6 的瀏覽器兼容性問題
  • react 對低版本的安卓webview 兼容性
  • iOS下 fixed與軟鍵盤的問題
  • onClick 阻止冒泡
  • meta對於移動端的一些特殊屬性
  • 頁面禁止復制、選中文本

1.使用 ES6 的瀏覽器兼容性問題

 由於 Babel 默認只轉換轉各種 ES2015 語法,而不轉換新的 API,比如 Promise,以及 Object.assign、Array.from 這些新方法,這時我們需要提供一些 ployfill 來模擬出這樣一個提供原生支持功能的瀏覽器環境。
 主要有兩種方式:babel-runtime 和 babel-polyfill。

 A.babel-runtime
 1.babel-runtime 的作用是模擬 ES2015 環境,包含各種分散的 polyfill 模塊,我們可以在自己的模塊里單獨引入,比如 promise:
 

圖片描述


  2.它們不會在全局環境添加未實現的方法,只是這樣手動引用每個 polyfill 會非常低效,我們可以借助 Runtime transform 插件來自動化處理這一切。
  首先使用 npm 安裝

圖片描述


  3.然后在 webpack 配置文件的 babel-loader 增加選項:

圖片描述

B.babel-polyfill

 而 babel-polyfill 是針對全局環境的,引入它瀏覽器就好像具備了規范里定義的完整的特性,一旦引入,就會跑一個 babel-polyfill 實例。用法如下:
 1.安裝 babel-polyfill

圖片描述


 2.在入口文件中引用:

圖片描述
其實做到這些,在大部分瀏覽器就可以正常跑了,

2.react 對低版本的安卓webview 兼容性

A.android較低版本webview不支持Object.assign改用var objectAssign = require('object-assign’)  這種情況上面方案可以解決
B.import React from 'react';import ReactDOM from 'react-dom';//不可放在其他模塊引入的后面,否則android5.0及以下版本webview報錯

3.iOS下 fixed與軟鍵盤的問題

 fixed失效是由於軟鍵盤喚起后,頁面的 fixed 元素將失效(ios認為用戶更希望的是元素隨着滾動而移動,也就是變成了 absolute 定位),
 既然變成了absolute,所以當頁面超過一屏且滾動時,失效的 fixed 元素就會跟隨滾動了。解決方案就是讓整個頁面處於一屏高度就能解決問題的根本
 <body> 
    <div class='warper'> 
        <div class='top'></div> 
        <div class='main'></div> 
    <div> 
    <div class="fix-bottom">
    </div> 
</body>

樣式:
warper{ 
    position: absolute; 
    width: 100%; 
    left: 0; 
    right: 0; 
    top: 0; 
    bottom: 0; 
    overflow-y: scroll; 
    -webkit-overflow-scrolling: touch;/* 解決ios滑動不流暢問題 */ }
.fix-bottom{
    position:fixed;
    bottom:0;
    width: 100%;
}


4.onClick 阻止冒泡
阻止冒泡事件分三種情況

A、阻止合成事件間的冒泡,用e.stopPropagation();

圖片描述

B、阻止原生事件與最外層document上的事件間的冒泡,用e.nativeEvent.stopImmediatePropagation();

圖片描述

C、阻止合成事件與除最外層document上的原生事件上的冒泡,通過判斷e.target來避免

圖片描述

5.meta對於移動端的一些特殊屬性

<!--主要I是強制讓文檔的寬度與設備寬度保持1:1,最大寬度1.0,禁止屏幕縮放。-->
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<!--這個也是iphone私有標簽,允許全屏瀏覽。-->
<meta content="yes" name="apple-mobile-web-app-capable">
<!--iphone的私有標簽,iphone頂端狀態條的樣式。-->
<meta content="black" name="apple-mobile-web-app-status-bar-style">
<!--禁止數字自動識別為電話號碼,這個比較有用,因為一串數字在iphone上會顯示成藍色,樣式加成別的顏色也是不生效的。-->
<meta content="telephone=no" name="format-detection">

6.頁面禁止復制、選中文本

-webkit-user-select: none;
 -moz-user-select: none;
 -khtml-user-select: none;
  user-select: none;

本文轉載於:猿2048➥https://www.mk2048.com/blog/blog.php?id=h0110jhjbaa


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM