fogwind 2 vuotta sitten
vanhempi
commit
bcc3a90747

BIN
icon/icon150x150.png


BIN
image/loading.gif


BIN
launch/launch1080x1920.png


+ 0 - 171
pages/main/main.stml

@@ -1,171 +0,0 @@
-<template>
-	<safe-area class="page">
-		<view class="body">
-			<img id='loading' class="img" src="../../image/loading.gif" />
-		</view>
-	</safe-area>
-</template>
-<script>
-export default {
-	name: 'main',
-	apiready() {
-		var that = this;
-
-        api.openFrame({
-			name: 'main',
-			url: 'https://m.alipearlhair.com',
-			rect: {
-				x: 0,
-				y: 0,
-				w: 'auto',
-				h: 'auto'
-			},
-			useWKWebView: true,
-			historyGestureEnabled: true,
-			bounces: false,
-			progress:{
-                type:'page'
-            }
-		});
-		api.setStatusBarStyle({
-			style: 'light'
-		});
-
-		api.setFrameClient({
-		    frameName:'main'
-		},function(ret){
-		    that.onBrowserStateChange(ret);
-		});
-		this.removeLogic();
-        api.addEventListener({
-            name: 'keyback'
-        }, function(ret, err){
-            api.historyBack({
-                frameName:'main'
-            },function(ret,err){
-                if(!ret.status){
-                    api.closeWidget();
-                }
-            });
-        });
-		this.removeLogic();
-
-		// this.googlePushInit();
-	},
-	data() {
-		return {
-			msg: "Hello APICloud",
-			launchRemoved: false,
-			loadingRemoved: false,
-		};
-	},
-	methods: {
-
-		onBrowserStateChange(ret){
-			if(0 == ret.state){//开始加载
-				if(!this.launchRemoved){
-					this.launchRemoved = true;
-					this.removeLaunch();
-				}
-			}
-			if(2 == ret.state){
-				if(!this.loadingRemoved){
-					this.loadingRemoved = true;
-					document.getElementById('loading').style.display = 'none';
-				}
-			}
-		},
-		
-		removeLogic(){
-			var that = this;
-			setTimeout(function(){
-				if(!that.launchRemoved){
-					that.launchRemoved = true;
-					that.removeLaunch();
-				}
-			}, 3000);
-		},
-
-		removeLaunch(){
-			// 移除启动图
-			api.removeLaunchView({
-				animation:{
-					type:"fade",
-					subType:"from_right",
-					duration:300
-				}
-			});
-		},
-		/*
-		// google推送
-		googlePushInit() {
-			var googlePush = api.require('googlePush'); 
-			// 初始化 
-			googlePush.initFcm(function(ret, err) {
-				console.log('---initFcm satrt---');
-				console.log(JSON.stringify(ret));
-				console.log(JSON.stringify(err));
-				console.log('---initFcm end---');
-				// 获取token
-				googlePush.registerToken(function(ret, err){
-					console.log('---registerToken satrt---');
-					console.log(JSON.stringify(ret));
-					console.log(JSON.stringify(err));
-					console.log('---registerToken end---');
-				});
-				// 收到消息时会触发
-				googlePush.addOnMessageLisener(function(ret){
-					console.log('---addOnMessageLisener satrt---');
-					console.log(JSON.stringify(ret));
-					console.log('---addOnMessageLisener end---');
-				});
-			});
-			// 监听通知栏消息被点击
-			api.addEventListener({
-				name:'appintent'
-			},function(ret,err){
-				console.log('---appintent satrt---');
-				console.log(JSON.stringify(ret));
-				console.log(JSON.stringify(err));
-				console.log('---appintent end---');
-				var appParam = ret.appParam;
-				if(api.systemType == 'ios'){
-					var iosUrl = ret.iosUrl;
-				} else {
-					var sourceAppId = ret.sourceAppId;
-					console.log(JSON.stringify(appParam));
-					if(appParam.url) {
-						api.openWin({
-							name: 'WestKiss Sale',
-							url: appParam.url,
-							pageParam: {
-								name: 'test'
-							}
-						});
-					}
-				}
-			});
-		}
-		*/
-	}
-};
-</script>
-<style>
-.page {
-	width: 100%;
-	height: 100%;
-	background: #fff;
-	display:flex;
-	justify-content:center;
-	align-items: center;
-}
-.body{
-	position: relative;
-}
-.img{
-    display:block;
-	width: 40px;
-	height: 40px;
-}
-
-</style>

+ 7 - 5
config.xml

@@ -1,17 +1,17 @@
-<widget id="A1741688086024683527" version="0.0.1">
+<widget id="A1741688086024683527" version="1.1.3">
 
-	<name>Alipearl Hair</name>
+	<name>Alipearlhair</name>
 
 	<description>This APP is developed for the corresponding APP end of website (www.alipearlhair.com).</description>
 
 	<author email="server@alipearlhair.com" href="https://www.alipearlhair.com">alipearl</author>
 
+	<preference name="userAgent" value="alipearlApp" />
+
 	<preference name="avm" value="true"/>
 
 	<preference name="android_abi" value="arm64-v8a"/>
 
-	<preference name="userAgent" value="APICloud"/>
-
 	<preference name="checkSslTrusted" value="false"/>
 
 	<preference name="appCertificateVerify" value="false"/>
@@ -40,7 +40,7 @@
 
 	<preference name="statusBarAppearance" value="false"/>
 
-	<content src="pages/main/main"/>
+	<content src="index.html"/>
 
 	<access origin="*"/>
 
@@ -50,4 +50,6 @@
 
 	<permission name="internet"/>
 
+	<meta-data name="com.google.android.gms.version" value="11020000"/>
+
 </widget>

+ 47 - 0
widget/google-services.json

@@ -0,0 +1,47 @@
+{
+  "project_info": {
+    "project_number": "72208281718",
+    "project_id": "alipearl-95f9d",
+    "storage_bucket": "alipearl-95f9d.appspot.com"
+  },
+  "client": [
+    {
+      "client_info": {
+        "mobilesdk_app_id": "1:72208281718:android:f3b22f02ea12d52e07af57",
+        "android_client_info": {
+          "package_name": "com.alipearlhair.app"
+        }
+      },
+      "oauth_client": [
+        {
+          "client_id": "72208281718-pvku0f8g8mb02r9fin1bpe17m3lohcbr.apps.googleusercontent.com",
+          "client_type": 1,
+          "android_info": {
+            "package_name": "com.alipearlhair.app",
+            "certificate_hash": "6fc54f15ed8667805fd19f3fdf9ceda4b26f204f"
+          }
+        },
+        {
+          "client_id": "72208281718-m0kfhvk4foj57u307683k2g3451br1au.apps.googleusercontent.com",
+          "client_type": 3
+        }
+      ],
+      "api_key": [
+        {
+          "current_key": "AIzaSyD-aQNzWxNwwtl2sGGetayTJOCnGhqYwKY"
+        }
+      ],
+      "services": {
+        "appinvite_service": {
+          "other_platform_oauth_client": [
+            {
+              "client_id": "72208281718-m0kfhvk4foj57u307683k2g3451br1au.apps.googleusercontent.com",
+              "client_type": 3
+            }
+          ]
+        }
+      }
+    }
+  ],
+  "configuration_version": "1"
+}

BIN
widget/icon/icon150x150.png


BIN
widget/image/loading.gif


+ 178 - 0
widget/index.html

@@ -0,0 +1,178 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/>
+    <title>Hello APICloud</title>
+    <link rel="stylesheet" type="text/css" href="./css/api.css" />
+    <link rel="stylesheet" type="text/css" href="./css/common.css" />
+	<style>
+		.center{
+			display:-webkit-box;
+			-webkit-box-orient:vertical;
+			-webkit-box-pack:center;
+			-webkit-box-align:center;
+			position: fixed;
+			top: 50%;
+			left: 50%;
+			transform: translate3d(-50%,-50%,0);
+			width: 65px;
+			height: 65px;
+		}
+	</style>
+</head>
+<body style='background:#ffffff;'>
+    <div id="wrap">
+        <div id="main" class='center'>
+            <img id='loading' src='image/loading.gif' width=65 height=65>
+        </div>
+    </div>
+</body>
+<script type="text/javascript" src="./script/api.js"></script>
+<script type="text/javascript">
+    
+    var launchRemoved = false;
+    var loadingRemoved = false;
+    console.log('ua -- ',navigator.userAgent);
+	apiready = function(){
+        api.setStatusBarStyle({
+            style: 'light'
+        });
+        api.openFrame({
+            name: 'main',
+            url: 'https://m.alipearlhair.com',
+            bounces: false,
+            rect: {
+                w: 'auto',
+                h: 'auto'
+            },
+            progress:{
+                type:'page'
+            }
+        });
+		api.setFrameClient({
+		    frameName:'main'
+		},function(ret){
+		    onBrowserStateChange(ret);
+		});
+		removeLogic();
+        api.addEventListener({
+            name: 'keyback'
+        }, function(ret, err){
+            api.historyBack({
+                frameName:'main'
+            },function(ret,err){
+                if(!ret.status){
+                    api.closeWidget();
+                }
+            });
+        });
+		removeLogic();
+		googlePushInit();
+    };
+
+	function onBrowserStateChange(ret){
+    	if(0 == ret.state){//开始加载
+			if(!launchRemoved){
+				launchRemoved = true;
+				removeLaunch();
+			}
+    	}
+    	if(2 == ret.state){
+    		if(!loadingRemoved){
+    			loadingRemoved = true;
+    			document.getElementById('loading').style.display = 'none';
+    		}
+    	}
+    }
+	
+	function removeLogic(){
+		setTimeout(function(){
+			if(!launchRemoved){
+				launchRemoved = true;
+				removeLaunch();
+			}
+		}, 3000);
+	}
+
+	function removeLaunch(){
+		api.removeLaunchView({
+			animation:{
+				type:"fade",
+				subType:"from_right",
+				duration:300
+			}
+		});
+	}
+
+	// google推送
+	function googlePushInit() {
+			var googlePush = api.require('googlePush'); 
+			// 初始化 
+			googlePush.initFcm(function(ret, err) {
+				console.log('---initFcm satrt---');
+				console.log(JSON.stringify(ret));
+				console.log(JSON.stringify(err));
+				console.log('---initFcm end---');
+				// 获取token
+				googlePush.registerToken(function(ret, err){
+					console.log('---registerToken satrt---');
+					console.log(JSON.stringify(ret));
+					// alert(JSON.stringify(ret));
+					console.log(JSON.stringify(err));
+					console.log('---registerToken end---');
+				});
+				// 收到消息时会触发
+				googlePush.addOnMessageLisener(function(ret){
+					console.log('---addOnMessageLisener satrt---');
+					console.log(JSON.stringify(ret));
+					console.log('---addOnMessageLisener end---');
+				});
+			});
+			// 监听通知栏消息被点击
+			api.addEventListener({
+				name:'appintent'
+			},function(ret,err){
+				console.log('---appintent satrt---');
+				/*
+                {
+					"iosUrl":"",
+					"sourceAppId":"com.westkiss.m",
+					"appParam":{
+						"android.intent.extra.REFERRER":"com.westkiss.m",
+						"google.delivered_priority":"high",
+						"google.sent_time":1672015802071,
+						"google.ttl":604800,
+						"google.original_priority":"high",
+						"title ":"02 test",
+						"url":"https://m.westkiss.com/return_policy",
+						"from":"506304076475",
+						"google.message_id":"0:1672015802081797%3781dfb93781dfb9",
+						"content":"this is test 002",
+						"collapse_key":"com.westkiss.m"
+					}
+				}
+				*/
+				console.log(JSON.stringify(ret));
+				console.log(JSON.stringify(err));
+				console.log('---appintent end---');
+				var appParam = ret.appParam;
+				if(api.systemType == 'ios'){
+					var iosUrl = ret.iosUrl;
+				} else {
+					var sourceAppId = ret.sourceAppId;
+					console.log(JSON.stringify(appParam));
+					if(appParam.url) {
+						api.openWin({
+							name: 'WestKiss Sale',
+							url: appParam.url,
+							pageParam: {
+								name: 'test'
+							}
+						});
+					}
+				}
+			});
+		}
+</script>
+</html>

BIN
widget/launch/launch1080x1920.png


res/manifest.xml → widget/res/manifest.xml


+ 607 - 0
widget/script/api.js

@@ -0,0 +1,607 @@
+/*
+ * APICloud JavaScript Library
+ * Copyright (c) 2014 apicloud.com
+ */
+(function(window){
+    var u = {};
+    var isAndroid = (/android/gi).test(navigator.appVersion);
+    var uzStorage = function(){
+        var ls = window.localStorage;
+        if(isAndroid){
+           ls = os.localStorage();
+        }
+        return ls;
+    };
+    function parseArguments(url, data, fnSuc, dataType) {
+        if (typeof(data) == 'function') {
+            dataType = fnSuc;
+            fnSuc = data;
+            data = undefined;
+        }
+        if (typeof(fnSuc) != 'function') {
+            dataType = fnSuc;
+            fnSuc = undefined;
+        }
+        return {
+            url: url,
+            data: data,
+            fnSuc: fnSuc,
+            dataType: dataType
+        };
+    }
+    u.trim = function(str){
+        if(String.prototype.trim){
+            return str == null ? "" : String.prototype.trim.call(str);
+        }else{
+            return str.replace(/(^\s*)|(\s*$)/g, "");
+        }
+    };
+    u.trimAll = function(str){
+        return str.replace(/\s*/g,'');
+    };
+    u.isElement = function(obj){
+        return !!(obj && obj.nodeType == 1);
+    };
+    u.isArray = function(obj){
+        if(Array.isArray){
+            return Array.isArray(obj);
+        }else{
+            return obj instanceof Array;
+        }
+    };
+    u.isEmptyObject = function(obj){
+        if(JSON.stringify(obj) === '{}'){
+            return true;
+        }
+        return false;
+    };
+    u.addEvt = function(el, name, fn, useCapture){
+        if(!u.isElement(el)){
+            console.warn('$api.addEvt Function need el param, el param must be DOM Element');
+            return;
+        }
+        useCapture = useCapture || false;
+        if(el.addEventListener) {
+            el.addEventListener(name, fn, useCapture);
+        }
+    };
+    u.rmEvt = function(el, name, fn, useCapture){
+        if(!u.isElement(el)){
+            console.warn('$api.rmEvt Function need el param, el param must be DOM Element');
+            return;
+        }
+        useCapture = useCapture || false;
+        if (el.removeEventListener) {
+            el.removeEventListener(name, fn, useCapture);
+        }
+    };
+    u.one = function(el, name, fn, useCapture){
+        if(!u.isElement(el)){
+            console.warn('$api.one Function need el param, el param must be DOM Element');
+            return;
+        }
+        useCapture = useCapture || false;
+        var that = this;
+        var cb = function(){
+            fn && fn();
+            that.rmEvt(el, name, cb, useCapture);
+        };
+        that.addEvt(el, name, cb, useCapture);
+    };
+    u.dom = function(el, selector){
+        if(arguments.length === 1 && typeof arguments[0] == 'string'){
+            if(document.querySelector){
+                return document.querySelector(arguments[0]);
+            }
+        }else if(arguments.length === 2){
+            if(el.querySelector){
+                return el.querySelector(selector);
+            }
+        }
+    };
+    u.domAll = function(el, selector){
+        if(arguments.length === 1 && typeof arguments[0] == 'string'){
+            if(document.querySelectorAll){
+                return document.querySelectorAll(arguments[0]);
+            }
+        }else if(arguments.length === 2){
+            if(el.querySelectorAll){
+                return el.querySelectorAll(selector);
+            }
+        }
+    };
+    u.byId = function(id){
+        return document.getElementById(id);
+    };
+    u.first = function(el, selector){
+        if(arguments.length === 1){
+            if(!u.isElement(el)){
+                console.warn('$api.first Function need el param, el param must be DOM Element');
+                return;
+            }
+            return el.children[0];
+        }
+        if(arguments.length === 2){
+            return this.dom(el, selector+':first-child');
+        }
+    };
+    u.last = function(el, selector){
+        if(arguments.length === 1){
+            if(!u.isElement(el)){
+                console.warn('$api.last Function need el param, el param must be DOM Element');
+                return;
+            }
+            var children = el.children;
+            return children[children.length - 1];
+        }
+        if(arguments.length === 2){
+            return this.dom(el, selector+':last-child');
+        }
+    };
+    u.eq = function(el, index){
+        return this.dom(el, ':nth-child('+ index +')');
+    };
+    u.not = function(el, selector){
+        return this.domAll(el, ':not('+ selector +')');
+    };
+    u.prev = function(el){
+        if(!u.isElement(el)){
+            console.warn('$api.prev Function need el param, el param must be DOM Element');
+            return;
+        }
+        var node = el.previousSibling;
+        if(node.nodeType && node.nodeType === 3){
+            node = node.previousSibling;
+            return node;
+        }
+    };
+    u.next = function(el){
+        if(!u.isElement(el)){
+            console.warn('$api.next Function need el param, el param must be DOM Element');
+            return;
+        }
+        var node = el.nextSibling;
+        if(node.nodeType && node.nodeType === 3){
+            node = node.nextSibling;
+            return node;
+        }
+    };
+    u.closest = function(el, selector){
+        if(!u.isElement(el)){
+            console.warn('$api.closest Function need el param, el param must be DOM Element');
+            return;
+        }
+        var doms, targetDom;
+        var isSame = function(doms, el){
+            var i = 0, len = doms.length;
+            for(i; i<len; i++){
+                if(doms[i].isEqualNode(el)){
+                    return doms[i];
+                }
+            }
+            return false;
+        };
+        var traversal = function(el, selector){
+            doms = u.domAll(el.parentNode, selector);
+            targetDom = isSame(doms, el);
+            while(!targetDom){
+                el = el.parentNode;
+                if(el != null && el.nodeType == el.DOCUMENT_NODE){
+                    return false;
+                }
+                traversal(el, selector);
+            }
+
+            return targetDom;
+        };
+
+        return traversal(el, selector);
+    };
+    u.contains = function(parent,el){
+        var mark = false;
+        if(el === parent){
+            mark = true;
+            return mark;
+        }else{
+            do{
+                el = el.parentNode;
+                if(el === parent){
+                    mark = true;
+                    return mark;
+                }
+            }while(el === document.body || el === document.documentElement);
+
+            return mark;
+        }
+        
+    };
+    u.remove = function(el){
+        if(el && el.parentNode){
+            el.parentNode.removeChild(el);
+        }
+    };
+    u.attr = function(el, name, value){
+        if(!u.isElement(el)){
+            console.warn('$api.attr Function need el param, el param must be DOM Element');
+            return;
+        }
+        if(arguments.length == 2){
+            return el.getAttribute(name);
+        }else if(arguments.length == 3){
+            el.setAttribute(name, value);
+            return el;
+        }
+    };
+    u.removeAttr = function(el, name){
+        if(!u.isElement(el)){
+            console.warn('$api.removeAttr Function need el param, el param must be DOM Element');
+            return;
+        }
+        if(arguments.length === 2){
+            el.removeAttribute(name);
+        }
+    };
+    u.hasCls = function(el, cls){
+        if(!u.isElement(el)){
+            console.warn('$api.hasCls Function need el param, el param must be DOM Element');
+            return;
+        }
+        if(el.className.indexOf(cls) > -1){
+            return true;
+        }else{
+            return false;
+        }
+    };
+    u.addCls = function(el, cls){
+        if(!u.isElement(el)){
+            console.warn('$api.addCls Function need el param, el param must be DOM Element');
+            return;
+        }
+        if('classList' in el){
+            el.classList.add(cls);
+        }else{
+            var preCls = el.className;
+            var newCls = preCls +' '+ cls;
+            el.className = newCls;
+        }
+        return el;
+    };
+    u.removeCls = function(el, cls){
+        if(!u.isElement(el)){
+            console.warn('$api.removeCls Function need el param, el param must be DOM Element');
+            return;
+        }
+        if('classList' in el){
+            el.classList.remove(cls);
+        }else{
+            var preCls = el.className;
+            var newCls = preCls.replace(cls, '');
+            el.className = newCls;
+        }
+        return el;
+    };
+    u.toggleCls = function(el, cls){
+        if(!u.isElement(el)){
+            console.warn('$api.toggleCls Function need el param, el param must be DOM Element');
+            return;
+        }
+       if('classList' in el){
+            el.classList.toggle(cls);
+        }else{
+            if(u.hasCls(el, cls)){
+                u.addCls(el, cls);
+            }else{
+                u.removeCls(el, cls);
+            }
+        }
+        return el;
+    };
+    u.val = function(el, val){
+        if(!u.isElement(el)){
+            console.warn('$api.val Function need el param, el param must be DOM Element');
+            return;
+        }
+        if(arguments.length === 1){
+            switch(el.tagName){
+                case 'SELECT':
+                    var value = el.options[el.selectedIndex].value;
+                    return value;
+                    break;
+                case 'INPUT':
+                    return el.value;
+                    break;
+                case 'TEXTAREA':
+                    return el.value;
+                    break;
+            }
+        }
+        if(arguments.length === 2){
+            switch(el.tagName){
+                case 'SELECT':
+                    el.options[el.selectedIndex].value = val;
+                    return el;
+                    break;
+                case 'INPUT':
+                    el.value = val;
+                    return el;
+                    break;
+                case 'TEXTAREA':
+                    el.value = val;
+                    return el;
+                    break;
+            }
+        }
+        
+    };
+    u.prepend = function(el, html){
+        if(!u.isElement(el)){
+            console.warn('$api.prepend Function need el param, el param must be DOM Element');
+            return;
+        }
+        el.insertAdjacentHTML('afterbegin', html);
+        return el;
+    };
+    u.append = function(el, html){
+        if(!u.isElement(el)){
+            console.warn('$api.append Function need el param, el param must be DOM Element');
+            return;
+        }
+        el.insertAdjacentHTML('beforeend', html);
+        return el;
+    };
+    u.before = function(el, html){
+        if(!u.isElement(el)){
+            console.warn('$api.before Function need el param, el param must be DOM Element');
+            return;
+        }
+        el.insertAdjacentHTML('beforebegin', html);
+        return el;
+    };
+    u.after = function(el, html){
+        if(!u.isElement(el)){
+            console.warn('$api.after Function need el param, el param must be DOM Element');
+            return;
+        }
+        el.insertAdjacentHTML('afterend', html);
+        return el;
+    };
+    u.html = function(el, html){
+        if(!u.isElement(el)){
+            console.warn('$api.html Function need el param, el param must be DOM Element');
+            return;
+        }
+        if(arguments.length === 1){
+            return el.innerHTML;
+        }else if(arguments.length === 2){
+            el.innerHTML = html;
+            return el;
+        }
+    };
+    u.text = function(el, txt){
+        if(!u.isElement(el)){
+            console.warn('$api.text Function need el param, el param must be DOM Element');
+            return;
+        }
+        if(arguments.length === 1){
+            return el.textContent;
+        }else if(arguments.length === 2){
+            el.textContent = txt;
+            return el;
+        }
+    };
+    u.offset = function(el){
+        if(!u.isElement(el)){
+            console.warn('$api.offset Function need el param, el param must be DOM Element');
+            return;
+        }
+        var sl = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
+        var st = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
+
+        var rect = el.getBoundingClientRect();
+        return {
+            l: rect.left + sl,
+            t: rect.top + st,
+            w: el.offsetWidth,
+            h: el.offsetHeight
+        };
+    };
+    u.css = function(el, css){
+        if(!u.isElement(el)){
+            console.warn('$api.css Function need el param, el param must be DOM Element');
+            return;
+        }
+        if(typeof css == 'string' && css.indexOf(':') > 0){
+            el.style && (el.style.cssText += ';' + css);
+        }
+    };
+    u.cssVal = function(el, prop){
+        if(!u.isElement(el)){
+            console.warn('$api.cssVal Function need el param, el param must be DOM Element');
+            return;
+        }
+        if(arguments.length === 2){
+            var computedStyle = window.getComputedStyle(el, null);
+            return computedStyle.getPropertyValue(prop);
+        }
+    };
+    u.jsonToStr = function(json){
+        if(typeof json === 'object'){
+            return JSON && JSON.stringify(json);
+        }
+    };
+    u.strToJson = function(str){
+        if(typeof str === 'string'){
+            return JSON && JSON.parse(str);
+        }
+    };
+    u.setStorage = function(key, value){
+        if(arguments.length === 2){
+            var v = value;
+            if(typeof v == 'object'){
+                v = JSON.stringify(v);
+                v = 'obj-'+ v;
+            }else{
+                v = 'str-'+ v;
+            }
+            var ls = uzStorage();
+            if(ls){
+                ls.setItem(key, v);
+            }
+        }
+    };
+    u.getStorage = function(key){
+        var ls = uzStorage();
+        if(ls){
+            var v = ls.getItem(key);
+            if(!v){return;}
+            if(v.indexOf('obj-') === 0){
+                v = v.slice(4);
+                return JSON.parse(v);
+            }else if(v.indexOf('str-') === 0){
+                return v.slice(4);
+            }
+        }
+    };
+    u.rmStorage = function(key){
+        var ls = uzStorage();
+        if(ls && key){
+            ls.removeItem(key);
+        }
+    };
+    u.clearStorage = function(){
+        var ls = uzStorage();
+        if(ls){
+            ls.clear();
+        }
+    };
+
+   
+    /*by king*/
+    u.fixIos7Bar = function(el){
+        if(!u.isElement(el)){
+            console.warn('$api.fixIos7Bar Function need el param, el param must be DOM Element');
+            return;
+        }
+        var strDM = api.systemType;
+        if (strDM == 'ios') {
+            var strSV = api.systemVersion;
+            var numSV = parseInt(strSV,10);
+            var fullScreen = api.fullScreen;
+            var iOS7StatusBarAppearance = api.iOS7StatusBarAppearance;
+            if (numSV >= 7 && !fullScreen && iOS7StatusBarAppearance) {
+                el.style.paddingTop = '20px';
+            }
+        }
+    };
+    u.fixStatusBar = function(el){
+        if(!u.isElement(el)){
+            console.warn('$api.fixStatusBar Function need el param, el param must be DOM Element');
+            return;
+        }
+        var sysType = api.systemType;
+        if(sysType == 'ios'){
+            u.fixIos7Bar(el);
+        }else if(sysType == 'android'){
+            var ver = api.systemVersion;
+            ver = parseFloat(ver);
+            if(ver >= 4.4){
+                el.style.paddingTop = '25px';
+            }
+        }
+    };
+    u.toast = function(title, text, time){
+        var opts = {};
+        var show = function(opts, time){
+            api.showProgress(opts);
+            setTimeout(function(){
+                api.hideProgress();
+            },time);
+        };
+        if(arguments.length === 1){
+            var time = time || 500;
+            if(typeof title === 'number'){
+                time = title;
+            }else{
+                opts.title = title+'';
+            }
+            show(opts, time);
+        }else if(arguments.length === 2){
+            var time = time || 500;
+            var text = text;
+            if(typeof text === "number"){
+                var tmp = text;
+                time = tmp;
+                text = null;
+            }
+            if(title){
+                opts.title = title;
+            }
+            if(text){
+                opts.text = text;
+            }
+            show(opts, time);
+        }
+        if(title){
+            opts.title = title;
+        }
+        if(text){
+            opts.text = text;
+        }
+        time = time || 500;
+        show(opts, time);
+    };
+    u.post = function(/*url,data,fnSuc,dataType*/){
+        var argsToJson = parseArguments.apply(null, arguments);
+        var json = {};
+        var fnSuc = argsToJson.fnSuc;
+        argsToJson.url && (json.url = argsToJson.url);
+        argsToJson.data && (json.data = argsToJson.data);
+        if(argsToJson.dataType){
+            var type = argsToJson.dataType.toLowerCase();
+            if (type == 'text'||type == 'json') {
+                json.dataType = type;
+            }
+        }else{
+            json.dataType = 'json';
+        }
+        json.method = 'post';
+        api.ajax(json,
+            function(ret,err){
+                if (ret) {
+                    fnSuc && fnSuc(ret);
+                }
+            }
+        );
+    };
+    u.get = function(/*url,fnSuc,dataType*/){
+        var argsToJson = parseArguments.apply(null, arguments);
+        var json = {};
+        var fnSuc = argsToJson.fnSuc;
+        argsToJson.url && (json.url = argsToJson.url);
+        //argsToJson.data && (json.data = argsToJson.data);
+        if(argsToJson.dataType){
+            var type = argsToJson.dataType.toLowerCase();
+            if (type == 'text'||type == 'json') {
+                json.dataType = type;
+            }
+        }else{
+            json.dataType = 'text';
+        }
+        json.method = 'get';
+        api.ajax(json,
+            function(ret,err){
+                if (ret) {
+                    fnSuc && fnSuc(ret);
+                }
+            }
+        );
+    };
+
+/*end*/
+    
+
+    window.$api = u;
+
+})(window);
+
+