微信小程序兼容性問題

在微信小程序開發(fā)中案站,經(jīng)常會遇到一些兼容性的問題娃承,我最近就遇到了一個(gè)問題狸相,就是在時(shí)間字符串轉(zhuǎn)化為時(shí)間戳的方法中闪朱,我用的Date.parse(new Date())這個(gè)方法月匣,但是在微信開發(fā)者工具中這個(gè)方法正常實(shí)現(xiàn),但是在一些iphone設(shè)備和安卓的部分設(shè)備中不會實(shí)現(xiàn)相關(guān)功能奋姿,為了解決這個(gè)問題我只能導(dǎo)入了momentjs锄开,不在調(diào)用系統(tǒng)方法了。這里我們就來討論一下一些兼容性問題称诗。

運(yùn)行環(huán)境差異

微信小程序運(yùn)行在三端:iOS萍悴、Android 和 用于調(diào)試的開發(fā)者工具。

三端的腳本執(zhí)行環(huán)境以及用于渲染非原生組件的環(huán)境是各不相同的:

  • 在 iOS 上寓免,小程序的 javascript 代碼是運(yùn)行在 JavaScriptCore 中癣诱,是由 WKWebView 來渲染的,環(huán)境有 iOS8以上
  • 在 Android 上再榄,小程序的 javascript 代碼是通過 X5 JSCore來解析狡刘,是由 X5 基于 Mobile Chrome 53/57 內(nèi)核來渲染的
  • 在 開發(fā)工具上享潜, 小程序的 javascript 代碼是運(yùn)行在 nwjs 中困鸥,是由 Chrome Webview 來渲染的

盡管三端的環(huán)境是十分相似的,但是還是有些許區(qū)別:

  • ES6 語法支持不一致 語法上開發(fā)者可以通過開啟 ES6 轉(zhuǎn) ES5 的功能來規(guī)避剑按。

  • wxss 渲染表現(xiàn)不一致 盡管可以通過開啟樣式補(bǔ)全來規(guī)避大部分的問題疾就,還是建議開發(fā)者需要在 iOS 和 Android 上分別檢查小程序的真實(shí)表現(xiàn)。

ES6 轉(zhuǎn) ES5

在 0.10.101000 以及之后版本的開發(fā)工具中艺蝴,會默認(rèn)使用 babel 將開發(fā)者 ES6 語法代碼轉(zhuǎn)換為三端都能很好支持的 ES5 的代碼猬腰,幫助開發(fā)者解決環(huán)境不同所帶來的開發(fā)問題。

01382B15-B73B-4B24-B043-0802DB2E3F10.png

樣式補(bǔ)全

開啟此選項(xiàng)猜敢,開發(fā)工具會自動檢測并補(bǔ)全缺失樣式姑荷,保證在低版本系統(tǒng)上的正常顯示。盡管可以規(guī)避大部分的問題 缩擂,還是建議開發(fā)者需要在 iOS 和 Android 上分別檢查小程序的真實(shí)表現(xiàn)鼠冕。

樣式補(bǔ)全

兼容

小程序的功能不斷的增加,但是舊版本的微信客戶端并不支持新功能胯盯,所以在使用這些新能力的時(shí)候需要做兼容懈费。

文檔會在組件,API等頁面描述中帶上各個(gè)功能所支持的版本號博脑。

可以通過 wx.getSystemInfo 或者 wx.getSystemInfoSync 獲取到小程序的基礎(chǔ)庫版本號憎乙。

可以通過 wx.canIUse 來判斷是否可以在該基礎(chǔ)庫版本下直接使用對應(yīng)的API或者組件

獲取系統(tǒng)信息

同步

let res = wx.getSystemInfoSync()
 console.log("同步獲取系統(tǒng)信息:" + res);
  console.log(res);

異步:

wx.getSystemInfo({
      success: function(res) {
        console.log("異步獲取系統(tǒng)信息:");
        console.log(res);
      },
    })
參數(shù) 說明 最低版本
brand 手機(jī)品牌 1.5.0
model 手機(jī)型號
pixelRatio 設(shè)備像素比
screenWidth 屏幕寬度 1.1.0
screenHeight 屏幕高度 1.1.0
windowWidth 可使用窗口寬度
windowHeight 可使用窗口高度
statusBarHeight 狀態(tài)欄的高度 1.9.0
language 微信設(shè)置的語言
version 微信版本號
system system
platform 客戶端平臺
SDKVersion 客戶端基礎(chǔ)庫版本 1.1.0
fontSizeSetting 用戶字體大小設(shè)置票罐。以“我-設(shè)置-通用-字體大小”中的設(shè)置為準(zhǔn),單位:px 1.5.0
版本比較

微信客戶端和小程序基礎(chǔ)庫的版本號風(fēng)格為 Major.Minor.Patch(主版本號.次版本號.修訂號)泞边。 開發(fā)者可以根據(jù)版本號去做兼容

function compareVersion(v1, v2) {
  v1 = v1.split('.')
  v2 = v2.split('.')
  var len = Math.max(v1.length, v2.length)

  while (v1.length < len) {
    v1.push('0')
  }
  while (v2.length < len) {
    v2.push('0')
  }

  for (var i = 0; i < len; i++) {
    var num1 = parseInt(v1[i])
    var num2 = parseInt(v2[i])

    if (num1 > num2) {
      return 1
    } else if (num1 < num2) {
      return -1
    }
  }

  return 0
}

compareVersion('1.11.0', '1.9.9')
// 1

該基礎(chǔ)庫版本下直接使用對應(yīng)的API或者組件的API

wx.canIUse(String)判斷小程序的API该押,回調(diào),參數(shù)阵谚,組件等是否在當(dāng)前版本可用沈善。此接口從基礎(chǔ)庫 1.1.1 版本開始支持。

String參數(shù)說明: 使用{API}.{method}.{param}.{options}或者{component}.{attribute}.{option}方式來調(diào)用椭蹄,例如:

  • {API} 代表 API 名字
  • {method} 代表調(diào)用方式闻牡,有效值為return, success, object, callback
  • {param} 代表參數(shù)或者返回值
  • {options} 代表參數(shù)的可選值
  • {component} 代表組件名字
  • {attribute} 代表組件屬性
  • {option} 代表組件屬性的可選值

例子:

wx.canIUse('openBluetoothAdapter')
wx.canIUse('getSystemInfoSync.return.screenWidth')
wx.canIUse('getSystemInfo.success.screenWidth')
wx.canIUse('showToast.object.image')
wx.canIUse('onCompassChange.callback.direction')
wx.canIUse('request.object.method.GET')

wx.canIUse('live-player')
wx.canIUse('text.selectable')
wx.canIUse('button.open-type.contact')

Javascript 標(biāo)準(zhǔn)庫兼容性問題

微信小程序的兼容性問題除了微信本身的 Bug 外,大部分是目標(biāo)平臺對 JavaScript 標(biāo)準(zhǔn)庫支持程度不同造成的绳矩。像我最上面遇到的問題就是Javascript 標(biāo)準(zhǔn)庫兼容性問題罩润。對于這類問題我們可以打補(bǔ)丁,從其他地方找到比較完善的js代碼翼馆,然后我們拷貝到我們的項(xiàng)目中割以。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市应媚,隨后出現(xiàn)的幾起案子严沥,更是在濱河造成了極大的恐慌,老刑警劉巖中姜,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件消玄,死亡現(xiàn)場離奇詭異,居然都是意外死亡丢胚,警方通過查閱死者的電腦和手機(jī)翩瓜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來携龟,“玉大人兔跌,你說我怎么就攤上這事∠矿” “怎么了坟桅?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蕊蝗。 經(jīng)常有香客問我仅乓,道長,這世上最難降的妖魔是什么匿又? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任方灾,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘裕偿。我一直安慰自己洞慎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布嘿棘。 她就那樣靜靜地躺著劲腿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸟妙。 梳的紋絲不亂的頭發(fā)上焦人,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機(jī)與錄音重父,去河邊找鬼花椭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛房午,可吹牛的內(nèi)容都是我干的矿辽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼郭厌,長吁一口氣:“原來是場噩夢啊……” “哼袋倔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起折柠,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤宾娜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后扇售,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體前塔,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年缘眶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了莫辨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片面殖。...
    茶點(diǎn)故事閱讀 38,664評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖览绿,靈堂內(nèi)的尸體忽然破棺而出慌洪,到底是詐尸還是另有隱情顶燕,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布冈爹,位于F島的核電站涌攻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏频伤。R本人自食惡果不足惜恳谎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧因痛,春花似錦婚苹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谭企,卻和暖如春廓译,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背债查。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工非区, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盹廷。 一個(gè)月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓院仿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親速和。 傳聞我的和親對象是個(gè)殘疾皇子歹垫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 本文我們來談?wù)勎⑿判〕绦蛳到y(tǒng)兼容性的那些坑。 微信小程序兼容性問題 微信小程序發(fā)布一周多了颠放,兼容性問題排惨,特別是 A...
    kamidox閱讀 28,105評論 1 21
  • 轉(zhuǎn)載鏈接 注:本文轉(zhuǎn)載知乎上的回答 作者:初雪 鏈接:https://www.zhihu.com/question...
    pengshuangta閱讀 28,504評論 9 295
  • 給提問的開發(fā)者的建議:提問之前先查詢 文檔、通過社區(qū)右上角搜索搜索已經(jīng)存在的問題碰凶。 寫一個(gè)簡明扼要的標(biāo)題暮芭,并且...
    極樂叔閱讀 13,395評論 0 3
  • 無端輾轉(zhuǎn)夢難成, 披衣獨(dú)坐聽雨聲欲低。 依稀漸聞蛙聲起辕宏, 半夏已至怨東風(fēng)。
    化繭成蝶_219a閱讀 191評論 0 0
  • 該用怎樣的顏色 去描繪那陽光下 動人的粗糙 該用怎樣的光亮 去描繪一座城池 曾有的輝煌 今夜,我在平遙 盛夏賣光了...
    cd172b0c0bb5閱讀 290評論 6 11