成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP、Android、iOS 的恩恩怨怨

陸斌 / 2766人閱讀

摘要:注意對這個(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

相關(guān)文章

  • PHP、AndroidiOS 恩恩怨怨

    摘要:注意對這個(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)簽的坑 在...

    big_cat 評論0 收藏0
  • Lo-Dash 與 underscore,Prototype 與 jQuery,兩段恩怨情仇

    摘要:一場恩怨,一段紛爭,一段歷史。后來崛起,并內(nèi)置了庫,從此一炮而紅。可見,前端大戰(zhàn)以的完勝而告終。無疑,在目前瀏覽器不完全兼容的情況下,提供的是操作的最佳選擇。然而社區(qū)的意見偏向于,是唯一選擇。的貢獻(xiàn)者認(rèn)為,現(xiàn)狀不會(huì)改變。 這幾天更新我的之前寫的 Chrome 插件 ChromeSnifferPlus 可以探測正在使用的開源軟件或者 js 類庫,兩天的時(shí)間增加了 20 多個(gè) js 庫的檢...

    evin2016 評論0 收藏0

發(fā)表評論

0條評論

陸斌

|高級講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<