api.js
import {
IOS,
ANDROID
} from './native.js'
function navigateToPage(path, options) {
// bridge方式调用的时候如果有业务回调调话,暂不支持多个业务兵法进行,一个业务完成后再进行另外一个业务
var params = {};
params.business = "navigateToPage"; // business表示业务名称,跳到新的webview页面
params.value = path;
if(options) {
params.params = options;
}
params.moduleName = "h5"; // 模块名指的是H打包出来的文件夹名称
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function popPage() {
var params = {};
params.business = "popPage"; // 返回上一个原生界面
params.offset = 1; // 返回到前面多少级页面,不填默认为1
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function popHistoryOrPage() {
var params = {};
params.business = "popHistoryOrPage"; // 如果有历史则返回上一个历史界面,否则返回上一个原生界面
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function saveData(key, value) {
var params = {};
params.business = "saveData";
params.key = key;
params.value = value;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function getUuiD(randomLength) {
var num = Math.random().toString().substr(2, randomLength);
var date = Date.now();
return Number(num + date).toString(36);
}
function getJSCallBackFunName() {
var callBackFunName = "a" + getUuiD(10) + "b";
return callBackFunName;
}
function getData(key, callBackFun) {
var callBackFunName = getJSCallBackFunName();
// 原生只能回调全局的函数,局部函数无法调用
window[callBackFunName] = function(resp) {
// 释放回调函数
window[callBackFunName] = null;
callBackFun(resp);
};
var params = {};
params.business = "getData";
params.key = key;
params.callBackFun = callBackFunName;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function deleteData(key) {
var params = {};
params.business = "deleteData";
params.key = key;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
// 回到首页
function backToMainPage() {
var params = {};
params.business = "backToMainPage";
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function httpRequest(requestParams, callBackFun) {
var callBackFunName = getJSCallBackFunName();
// 原生只能回调全局的函数,局部函数无法调用
window[callBackFunName] = function(resp) {
// 释放回调函数
window[callBackFunName] = null;
callBackFun(resp);
};
var params = {};
params.business = "httpRequest";
params.params = requestParams;
params.callBackFun = callBackFunName;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function logout() {
var params = {};
params.business = "logout";
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function getUserInfo(callBackFun) {
var callBackFunName = getJSCallBackFunName();
// 原生只能回调全局的函数,局部函数无法调用
window[callBackFunName] = function(resp) {
// 释放回调函数
window[callBackFunName] = null;
callBackFun(resp);
};
var params = {};
params.business = "getUserInfo";
params.callBackFun = callBackFunName;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function downloadH5Resource(options, callBackFun) {
var callBackFunName = getJSCallBackFunName();
// 原生只能回调全局的函数,局部函数无法调用
window[callBackFunName] = function(resp) {
var code = resp.code;
if (code == 0) { // 下载成功
var file = resp.file;
window[callBackFunName] = null;
} else if (code == 2) { // 下载进度
var progress = resp.progress;
} else if (code == 1) { // 下载失败
var msg = resp.msg;
window[callBackFunName] = null;
}
callBackFun(resp);
};
var params = {};
params.business = "downloadH5Resource";
params.params = options;
params.callBackFun = callBackFunName;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
// 解压替换本地H5资源包
function unzipUpgradeLocalH5Resource(callBackFun) {
var callBackFunName = getJSCallBackFunName();
// 原生只能回调全局的函数,局部函数无法调用
window[callBackFunName] = function() {
// 释放回调函数
window[callBackFunName] = null;
callBackFun();
};
var params = {};
params.business = "unzipUpgradeLocalH5Resource";
params.callBackFun = callBackFunName;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function reload() {
var params = {};
params.business = "reload";
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
// 返回key: isSave
function getSaveCameraPhotoToAlbum(options, callBackFun) {
var callBackFunName = getJSCallBackFunName();
// 原生只能回调全局的函数,局部函数无法调用
window[callBackFunName] = function(resp) {
// 释放回调函数
var code = resp.code;
if (code == 0) { // 上传成功
window[callBackFunName] = null;
} else if (code == 2) { // 上传进度
} else if (code == 1) { // 上传失败
window[callBackFunName] = null;
}
callBackFun(resp);
};
var params = {};
params.params = options;
params.business = "getSaveCameraPhotoToAlbum";
params.callBackFun = callBackFunName;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function setSaveCameraPhotoToAlbum(isSave) {
var callBackFunName = getJSCallBackFunName();
// 原生只能回调全局的函数,局部函数无法调用
window[callBackFunName] = function(resp) {
// 释放回调函数
var code = resp.code;
if (code == 0) { // 上传成功
window[callBackFunName] = null;
} else if (code == 2) { // 上传进度
} else if (code == 1) { // 上传失败
window[callBackFunName] = null;
}
callBackFun(resp);
};
var params = {};
params.params = {isSave: isSave};
params.business = "setSaveCameraPhotoToAlbum";
params.callBackFun = callBackFunName;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function selectImage(options, callBackFun) {
var callBackFunName = getJSCallBackFunName();
// 原生只能回调全局的函数,局部函数无法调用
window[callBackFunName] = function(resp) {
// 释放回调函数
var code = resp.code;
if (code == 0) { // 上传成功
window[callBackFunName] = null;
} else if (code == 2) { // 上传进度
} else if (code == 1) { // 上传失败
window[callBackFunName] = null;
}
callBackFun(resp);
};
var params = {};
params.params = options;
params.business = "selectImage";
params.callBackFun = callBackFunName;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function checkPermissions(callBackFun) {
var callBackFunName = getJSCallBackFunName();
// 原生只能回调全局的函数,局部函数无法调用
window[callBackFunName] = function(resp) {
// 释放回调函数
window[callBackFunName] = null;
callBackFun(resp);
};
var params = {};
params.business = "checkPermissions";
params.callBackFun = callBackFunName;
if(IOS) {
} else if(ANDROID) {
params.permissions = ["android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE"
];
}
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function log(msg) {
var params = {};
params.business = "log";
params.msg = msg;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function sendEvent(options) {
var params = {};
params.business = "sendEvent";
params.params = options;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function setTopBar(options) {
var params = {};
params.business = "setTopBar";
params.params = options;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function setWebViewHeight(width, height) {
var params = {};
params.business = "setWebViewHeight";
params.params = {
width: width,
height: height
}; // 单位px
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function getInterfaceHost(callBackFun) {
var callBackFunName = getJSCallBackFunName();
// 原生只能回调全局的函数,局部函数无法调用
window[callBackFunName] = function(resp) {
// 释放回调函数
window[callBackFunName] = null;
callBackFun(resp);
};
var params = {};
params.business = "getInterfaceHost";
params.callBackFun = callBackFunName;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function selectLocation(options, callBackFun) {
var callBackFunName = getJSCallBackFunName();
// 原生只能回调全局的函数,局部函数无法调用
window[callBackFunName] = function(resp) {
// 释放回调函数
window[callBackFunName] = null;
callBackFun(resp);
};
var params = {};
params.business = "selectLocation";
params.params = options;
params.callBackFun = callBackFunName;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function getStatusBarHeight(callBackFun) {
var callBackFunName = getJSCallBackFunName();
// 原生只能回调全局的函数,局部函数无法调用
window[callBackFunName] = function(resp) {
// 释放回调函数
window[callBackFunName] = null;
callBackFun(resp);
};
var params = {};
params.business = "getStatusBarHeight";
params.callBackFun = callBackFunName;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
function getWindowHeight(callBackFun) {
var callBackFunName = getJSCallBackFunName();
// 原生只能回调全局的函数,局部函数无法调用
window[callBackFunName] = function(resp) {
// 释放回调函数
window[callBackFunName] = null;
callBackFun(resp);
};
var params = {};
params.business = "getWindowHeight";
params.callBackFun = callBackFunName;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
// 梯智眼七牛云视频对讲
function videoTalkback(videoParams) {
var callBackFunName = getJSCallBackFunName();
// 原生只能回调全局的函数,局部函数无法调用
window[callBackFunName] = function(resp) {
// 释放回调函数
window[callBackFunName] = null;
callBackFun(resp);
};
var params = {};
params.business = "videoTalkback";
params.params =videoParams; // 单位px
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
// 进去工单补录详情页面
function toWorkOrderAdditioinalRecordDetailPage(workOrderParams) {
var params = {};
params.business = "toWorkOrderAdditioinalRecordDetailPage";
params.params =workOrderParams;
if (IOS) {
window.webkit.messageHandlers.bridge.postMessage(params);
} else if (ANDROID) {
var jsonStr = JSON.stringify(params);
window.messageHandlers.bridge(jsonStr);
}
}
export {
setStatusBarColor,
navigateToPage,
popPage,
saveData,
getData,
deleteData,
dataDataStatistic,
backToMainPage,
httpRequest,
logout,
getUserInfo,
downloadH5Resource,
unzipUpgradeLocalH5Resource,
reload,
selectImage,
checkPermissions,
log,
sendEvent,
setTopBar,
todoStateChange,
setWebViewHeight,
getInterfaceHost,
selectLocation,
getStatusBarHeight,
getWindowHeight,
videoTalkback,
toWorkOrderAdditioinalRecordDetailPage,
toNewPage
}
native.js
var browser={
versions:function(){
var u = navigator.userAgent;
var app = navigator.appVersion;
return {
trident: u.indexOf('Trident') > -1, //IE内核
presto: u.indexOf('Presto') > -1, //opera内核
webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,//火狐内核
mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1, //android终端
iPhone: u.indexOf('iPhone') > -1 , //是否为iPhone或者QQHD浏览器
iPad: u.indexOf('iPad') > -1, //是否iPad
webApp: u.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部
weixin: u.indexOf('MicroMessenger') > -1, //是否微信 (2015-01-22新增)
qq: u.match(/\sQQ/i) == " qq" //是否QQ
};
}(),
language:(navigator.browserLanguage || navigator.language).toLowerCase()
}
var IOS = browser.versions.ios;
var ANDROID = browser.versions.android;
export {IOS, ANDROID}