国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP、Android、iOS 的恩恩怨怨

big_cat / 613人閱讀

摘要:注意對這個有點不兼容,所以,謹慎,,,安卓均可以實現獲取版本信息這里需要判斷系統類型及版本所以,由此可見其實這里的判斷會很多,很多,很多。

其實應該更多的是互相的磨合與學習,希望身邊的人可以有自己的經驗分享,與理解,互相進步才是大家需要的,作為一個 "年老" (我也是90后) 的開發(fā)者,我覺得一代勝一代,未來才有勝算。額,好了,我不充當老師的角色了,去正題。

1. 安卓中 a 標簽的坑

在和客戶端交互的過程中,往往都有跳轉的,而在咱們 Web 開發(fā)中,默認的 href 屬性通常是 #,然后通過獲取標簽綁定動作觸發(fā)事件,這里有個坑,在與安卓交互過程中會發(fā)現。

click me
// include zepto or jquery or other.
$(function () {
    $("a").on("tap, click", function () {
        alert("test");
        return false;
    });
});

上述代碼中,會引起安卓交互中的一個坑,就是沒點擊一次,安卓都會在計數器上+1, 也就是,點擊第一次,彈一次窗,點擊第二次,會彈兩次窗,如此類推。

解決方法:

click me

Fxied!!

2. 安卓中交互的坑

我丟,安卓這個坑爹,在 js 交互中,無法傳遞對象,匿名函數等等的類型。也就是說,如果你的參數是接受一個對象的,你必須將她轉成 String,而且安卓中的返回值也是只能返回 String,在咱們接受之后需要將字符串轉換成對象。

簡單 判斷客戶端類型的:

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,"""));
 }

在調用 iOS 或者 android 的時候,先將參數傳遞到 encode 處進行過濾。

3. 判斷頁面是否在應用內打開

其實這個很簡單,經常做 web 開發(fā)的都應該知道,咱們每天都與 Http 協議打交道,而在 Http 中,有一個很重的的標識,就是 User-Agent,簡稱 UA,其實這個東西就像咱們的門票一樣,有著各種的信息在上面,其實就包括了很多的瀏覽器內核信息,版本信息,廠商等等......咱們就是從這個地方入手,在客戶端中定義自己的版本信息,與微信一樣。從此告別什么 url 上加什么破參數啊什么的。

以我的經驗來設計的話,一般按照這個格式:

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

因為此處我還沒太多接觸客戶端開發(fā),暫時沒有客戶端代碼演示.

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

曾幾何時,我也是一個懵懂無知的騷年,連接口是干嘛用的都不知道,大概也在 2014/8 月份左右,我對接口都是一種很敬畏的眼光去看待,直到現在,2016年,我更加視接口是一切數據庫的來源,其價值是最至高無上的。但是由我接觸接口(Application Programing Interface)開發(fā)之后,我發(fā)現目前的接口有好多問題,一個很明顯的就是,為啥每個接口都是 200,不應該啊,那非 200 響應的應該怎么辦?有做處理嗎?
直到后來,我推翻了這一現象,也說服了各方的人。我舉一個 Ajax 的例子:

首先我先問一個問題,為何 jquery 和 zepto 的 ajax 中,都有一個 error 回調?

$.ajax({
    // some code
    success: function () {},
    error: function () {}
});

請不要懷疑設計者的智商與知識,我猜他應該會比你聰明以及牛叉。這么做,肯定有原因的。其實這里的 error 就是為了讓非 2xx 狀態(tài)的時候進入的操作的。

如示例:

{
    status: 1
    content: {}
}

以上例子本身沒有錯誤,僅以自己看法對上述進行評述

其實咱們應該要善用本身已經有的東西,不需要再重新造多一個,吃力不討好,那你們就開始好好補一補 Http Status code 相關的知識吧。

示例:

Request Method:GET
Status Code:200 OK

200 一般都是成功響應,
3xx
4xx
5xx

根據不同的狀態(tài)碼進行不同的處理機制,無需重復再做這一步驟了,其實設計者也很清晰設計出狀態(tài)碼的意義,應該善用。

5. 判斷應用是否安裝,如果安裝,則打開,否則則跳去下載

其實這個有點無理取鬧,但是又不得不去做,首先這個其實原理也是挺繞的

利用iframe嘗試打開自定義scheme

跳轉到下載地址

只是那個判斷......

其實我是建議這些操作統一由一個地方去做,比如定義一個域名叫: down.xxx.com/應用id,后臺讀取應用id 相信信息,統一由一處轉發(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 對這個有點不兼容,所以,謹慎,iOS7,iOS8,安卓均可以實現

獲取版本信息:

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("."));
};

這里需要判斷系統類型及版本:

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 */
}

所以,由此可見其實這里的判斷會很多,很多,很多。所以我墻裂建議都統一到一個地方做分發(fā)。

這里其實還需要判斷是否微信,是否應用內打開,是否是分享出去的。

結合第 3 點的例子想想,這里的 if ...... 其實還是很恐怖的,我已經無路可退了......

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21397.html

相關文章

  • PHPAndroidiOS 恩恩怨怨

    摘要:注意對這個有點不兼容,所以,謹慎,,,安卓均可以實現獲取版本信息這里需要判斷系統類型及版本所以,由此可見其實這里的判斷會很多,很多,很多。 其實應該更多的是互相的磨合與學習,希望身邊的人可以有自己的經驗分享,與理解,互相進步才是大家需要的,作為一個 年老 (我也是90后) 的開發(fā)者,我覺得一代勝一代,未來才有勝算。額,好了,我不充當老師的角色了,去正題。 1. 安卓中 a 標簽的坑 在...

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

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

    evin2016 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<