摘要:注意對這個(gè)有點(diǎn)不兼容,所以,謹(jǐn)慎,,,安卓均可以實(shí)現(xiàn)獲取版本信息這里需要判斷系統(tǒng)類型及版本所以,由此可見其實(shí)這里的判斷會(huì)很多,很多,很多。
其實(shí)應(yīng)該更多的是互相的磨合與學(xué)習(xí),希望身邊的人可以有自己的經(jīng)驗(yàn)分享,與理解,互相進(jìn)步才是大家需要的,作為一個(gè) "年老" (我也是90后) 的開發(fā)者,我覺得一代勝一代,未來才有勝算。額,好了,我不充當(dāng)老師的角色了,去正題。
1. 安卓中 a 標(biāo)簽的坑在和客戶端交互的過程中,往往都有跳轉(zhuǎn)的,而在咱們 Web 開發(fā)中,默認(rèn)的 href 屬性通常是 #,然后通過獲取標(biāo)簽綁定動(dòng)作觸發(fā)事件,這里有個(gè)坑,在與安卓交互過程中會(huì)發(fā)現(xiàn)。
click me // include zepto or jquery or other. $(function () { $("a").on("tap, click", function () { alert("test"); return false; }); });
上述代碼中,會(huì)引起安卓交互中的一個(gè)坑,就是沒點(diǎn)擊一次,安卓都會(huì)在計(jì)數(shù)器上+1, 也就是,點(diǎn)擊第一次,彈一次窗,點(diǎn)擊第二次,會(huì)彈兩次窗,如此類推。
解決方法:
click me
Fxied!!
2. 安卓中交互的坑我丟,安卓這個(gè)坑爹,在 js 交互中,無法傳遞對象,匿名函數(shù)等等的類型。也就是說,如果你的參數(shù)是接受一個(gè)對象的,你必須將她轉(zhuǎn)成 String,而且安卓中的返回值也是只能返回 String,在咱們接受之后需要將字符串轉(zhuǎn)換成對象。
簡單 判斷客戶端類型的:
isiOS: function () { if (this.ua.match(/android/i) == "android") { return false; } return true; }, isAndroid: function () { if (this.ua.match(/android/i) == "android") { return true; } return false; }
解決方法:
encode: function (data) { if ("" == data) { return {}; } return JSON.stringify(data).replace(/"/g, """); }, decode: function (data) { if ("" == data) { return "{}"; } return JSON.parse(data.replace(/"/ig,""")); }
在調(diào)用 iOS 或者 android 的時(shí)候,先將參數(shù)傳遞到 encode 處進(jìn)行過濾。
3. 判斷頁面是否在應(yīng)用內(nèi)打開其實(shí)這個(gè)很簡單,經(jīng)常做 web 開發(fā)的都應(yīng)該知道,咱們每天都與 Http 協(xié)議打交道,而在 Http 中,有一個(gè)很重的的標(biāo)識(shí),就是 User-Agent,簡稱 UA,其實(shí)這個(gè)東西就像咱們的門票一樣,有著各種的信息在上面,其實(shí)就包括了很多的瀏覽器內(nèi)核信息,版本信息,廠商等等......咱們就是從這個(gè)地方入手,在客戶端中定義自己的版本信息,與微信一樣。從此告別什么 url 上加什么破參數(shù)啊什么的。
以我的經(jīng)驗(yàn)來設(shè)計(jì)的話,一般按照這個(gè)格式:
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5 {company} {appname} [{type}]/{version}
如: 騰訊,微信 [海外版本] 6.0.0
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5 Tencent MicroMessager oversase/6.0.0
因?yàn)榇颂幬疫€沒太多接觸客戶端開發(fā),暫時(shí)沒有客戶端代碼演示.
us: window.navigator.userAgent.toLowerCase(), is: function (name) { return tools.ua.match(eval("/" + name + "/i")) == name ? true : false; }
Examples:
if (/* Is app inside */) { /* Operation */ } else { /* Is app outside */ /* Operation */ }
Combine: In wechat
if (/* In wechat app */) { /* open share guide */ } else { if (/* In app */) { if (/* Is iOS */) { /* share iOS sdk */ } else { /* share android sdk */ } } else { /* share operation */ } }4. 請善用你的 Http Status Code
曾幾何時(shí),我也是一個(gè)懵懂無知的騷年,連接口是干嘛用的都不知道,大概也在 2014/8 月份左右,我對接口都是一種很敬畏的眼光去看待,直到現(xiàn)在,2016年,我更加視接口是一切數(shù)據(jù)庫的來源,其價(jià)值是最至高無上的。但是由我接觸接口(Application Programing Interface)開發(fā)之后,我發(fā)現(xiàn)目前的接口有好多問題,一個(gè)很明顯的就是,為啥每個(gè)接口都是 200,不應(yīng)該啊,那非 200 響應(yīng)的應(yīng)該怎么辦?有做處理嗎?
直到后來,我推翻了這一現(xiàn)象,也說服了各方的人。我舉一個(gè) Ajax 的例子:
首先我先問一個(gè)問題,為何 jquery 和 zepto 的 ajax 中,都有一個(gè) error 回調(diào)?
$.ajax({ // some code success: function () {}, error: function () {} });
請不要懷疑設(shè)計(jì)者的智商與知識(shí),我猜他應(yīng)該會(huì)比你聰明以及牛叉。這么做,肯定有原因的。其實(shí)這里的 error 就是為了讓非 2xx 狀態(tài)的時(shí)候進(jìn)入的操作的。
如示例:
{ status: 1 content: {} }
以上例子本身沒有錯(cuò)誤,僅以自己看法對上述進(jìn)行評述
其實(shí)咱們應(yīng)該要善用本身已經(jīng)有的東西,不需要再重新造多一個(gè),吃力不討好,那你們就開始好好補(bǔ)一補(bǔ) Http Status code 相關(guān)的知識(shí)吧。
示例:
Request Method:GET Status Code:200 OK
200 一般都是成功響應(yīng),
3xx
4xx
5xx
根據(jù)不同的狀態(tài)碼進(jìn)行不同的處理機(jī)制,無需重復(fù)再做這一步驟了,其實(shí)設(shè)計(jì)者也很清晰設(shè)計(jì)出狀態(tài)碼的意義,應(yīng)該善用。
5. 判斷應(yīng)用是否安裝,如果安裝,則打開,否則則跳去下載其實(shí)這個(gè)有點(diǎn)無理取鬧,但是又不得不去做,首先這個(gè)其實(shí)原理也是挺繞的
利用iframe嘗試打開自定義scheme
跳轉(zhuǎn)到下載地址
只是那個(gè)判斷......
其實(shí)我是建議這些操作統(tǒng)一由一個(gè)地方去做,比如定義一個(gè)域名叫: down.xxx.com/應(yīng)用id,后臺(tái)讀取應(yīng)用id 相信信息,統(tǒng)一由一處轉(zhuǎn)發(fā)。
function open () { var ifr = document.createElement("iframe"); ifr.src = url; ifr.style.display = "none"; document.body.appendChild(ifr); window.setTimeout(function(){ document.body.removeChild(ifr); }, 3000); }
注意 iOS9 對這個(gè)有點(diǎn)不兼容,所以,謹(jǐn)慎,iOS7,iOS8,安卓均可以實(shí)現(xiàn)
獲取版本信息:
var getVersion = function () { if (tools.client.isAndroid()) { return parseFloat(tools.ua.match(/Androids(.*?);/i)[1]); } return parseFloat(tools.ua.match(/OSs(.*?)slike/i)[1].split("_").join(".")); };
這里需要判斷系統(tǒng)類型及版本:
if (/* iOS */) { if (/* iOS version less than 9.0 */) { /* try open scheme */ /* redirect download link */ } else { /* other operate */ } } else { /* try open url */ /* redirect download link */ }
所以,由此可見其實(shí)這里的判斷會(huì)很多,很多,很多。所以我墻裂建議都統(tǒng)一到一個(gè)地方做分發(fā)。
這里其實(shí)還需要判斷是否微信,是否應(yīng)用內(nèi)打開,是否是分享出去的。
結(jié)合第 3 點(diǎn)的例子想想,這里的 if ...... 其實(shí)還是很恐怖的,我已經(jīng)無路可退了......
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78832.html
摘要:注意對這個(gè)有點(diǎn)不兼容,所以,謹(jǐn)慎,,,安卓均可以實(shí)現(xiàn)獲取版本信息這里需要判斷系統(tǒng)類型及版本所以,由此可見其實(shí)這里的判斷會(huì)很多,很多,很多。 其實(shí)應(yīng)該更多的是互相的磨合與學(xué)習(xí),希望身邊的人可以有自己的經(jīng)驗(yàn)分享,與理解,互相進(jìn)步才是大家需要的,作為一個(gè) 年老 (我也是90后) 的開發(fā)者,我覺得一代勝一代,未來才有勝算。額,好了,我不充當(dāng)老師的角色了,去正題。 1. 安卓中 a 標(biāo)簽的坑 在...
摘要:一場恩怨,一段紛爭,一段歷史。后來崛起,并內(nèi)置了庫,從此一炮而紅。可見,前端大戰(zhàn)以的完勝而告終。無疑,在目前瀏覽器不完全兼容的情況下,提供的是操作的最佳選擇。然而社區(qū)的意見偏向于,是唯一選擇。的貢獻(xiàn)者認(rèn)為,現(xiàn)狀不會(huì)改變。 這幾天更新我的之前寫的 Chrome 插件 ChromeSnifferPlus 可以探測正在使用的開源軟件或者 js 類庫,兩天的時(shí)間增加了 20 多個(gè) js 庫的檢...
閱讀 3750·2021-09-22 10:57
閱讀 1921·2019-08-30 15:55
閱讀 2710·2019-08-30 15:44
閱讀 1739·2019-08-30 15:44
閱讀 1885·2019-08-30 15:44
閱讀 2256·2019-08-30 12:49
閱讀 1060·2019-08-29 18:47
閱讀 3143·2019-08-29 16:15