h5和客戶端通信

/*

* *****xia

*/

let pace = module.exports = exports = {};

let DEVICE_TYPE = getDeviceType();

let PaceBridge = null;

let URL_BASE = 'http://pacehirunact.sparta.html5.qq.com'

pace.checkUrl = function (url, on_succ, on_fail) {

? ? url = getOriginUrl(url);

? ? if (!getBridge()) {

? ? ? ? url += url.indexOf('?') >= 0 ? '&' : '?';

? ? ? ? url += 'uin=MTEwOTI1&sign=b6b7aef83e9d7f3ae4eaade429383f23&pass_ticket=0dc18f27c9a2472112d0eb38e683b374';

? ? ? ? on_succ && on_succ(url);

? ? ? ? return;

? ? }

? ? if (DEVICE_TYPE === 'ios') {

? ? ? ? try {

? ? ? ? ? ? PaceBridge.postMessage({

? ? ? ? ? ? ? ? method: 'checkUrl',

? ? ? ? ? ? ? ? arguments: arguments,

? ? ? ? ? ? ? ? url: url,

? ? ? ? ? ? ? ? on_succ: on_succ,

? ? ? ? ? ? ? ? on_fail: on_fail || ((err) => console.error('checkUrl fail. err:', err)),

? ? ? ? ? ? });

? ? ? ? } catch (err) {

? ? ? ? ? ? console.log(err);

? ? ? ? }

? ? } else {

? ? ? ? PaceBridge.checkUrl(url, on_succ, on_fail);

? ? }

};

pace.openMapApp = function (param) {

? ? if (!getBridge()) {

? ? ? ? console.log('cannot open map app');

? ? ? ? return;

? ? }

? ? if (DEVICE_TYPE === 'ios') {

? ? ? ? PaceBridge.postMessage({

? ? ? ? ? ? method: 'openMapApp',

? ? ? ? ? ? arguments: arguments,

? ? ? ? ? ? param: param,

? ? ? ? });

? ? } else {

? ? ? ? PaceBridge.openMapApp(JSON.stringify(param));

? ? }

};

pace.back = function () {

? ? if (!getBridge()) {

? ? ? ? window.history && window.history.back && window.history.back();

? ? ? ? return;

? ? }

? ? if (DEVICE_TYPE === 'ios') {

? ? ? ? PaceBridge.postMessage({

? ? ? ? ? ? method: 'back',

? ? ? ? ? ? arguments: arguments,

? ? ? ? });

? ? } else {

? ? ? ? PaceBridge.back();

? ? }

};

pace.openSetPhone = function () {

? ? if (!getBridge()) {

? ? ? ? console.error('open set phone page fail');

? ? ? ? return;

? ? }

? ? if (DEVICE_TYPE === 'ios') {

? ? ? ? PaceBridge.postMessage({

? ? ? ? ? ? method: 'openSetPhone',

? ? ? ? ? ? arguments: arguments,

? ? ? ? });

? ? } else {

? ? ? ? PaceBridge.openSetPhone();

? ? }

};

pace.shareWx = function (param) {

? ? if (!getBridge()) {

? ? ? ? console.log('cannot share to wechat');

? ? ? ? return;

? ? }

? ? if (DEVICE_TYPE === 'ios') {

? ? ? ? PaceBridge.postMessage({

? ? ? ? ? ? method: 'shareWx',

? ? ? ? ? ? arguments: arguments,

? ? ? ? ? ? param: param,

? ? ? ? });

? ? } else {

? ? ? ? PaceBridge.shareWx(JSON.stringify(param));

? ? }

};

function getOriginUrl(url) {

? ? if (url[0] !== '/')

? ? ? ? return url;

? ? getOriginUrl.cache = getOriginUrl.cache || {};

? ? return getOriginUrl.cache[url] = getOriginUrl.cache[url] || URL_BASE + url;

}

function getBridge() {

? ? if (!PaceBridge) {

? ? ? ? if (DEVICE_TYPE === 'ios')

? ? ? ? ? ? PaceBridge = window.webkit.messageHandlers.PaceBridge;

? ? ? ? else

? ? ? ? ? ? PaceBridge = window.PaceBridge;

? ? }

? ? return PaceBridge;

}

function getBrowser() {

? ? return {

? ? ? ? versions: function () {

? ? ? ? ? ? var u = navigator.userAgent,

? ? ? ? ? ? ? ? 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('Linux') > -1, // android終端或uc瀏覽器

? ? ? ? ? ? ? ? iPhone: u.indexOf('iPhone') > -1, // 是否為iPhone或者QQHD瀏覽器

? ? ? ? ? ? ? ? iPad: u.indexOf('iPad') > -1, // 是否iPad

? ? ? ? ? ? ? ? webApp: u.indexOf('Safari') == -1, // 是否web應該程序,沒有頭部與底部

? ? ? ? ? ? ? ? weixin: u.match(/MicroMessenger/i) == "micromessenger" || window.WeixinJSBridge != undefined

? ? ? ? ? ? };

? ? ? ? }(),

? ? ? ? language: (navigator.browserLanguage || navigator.language).toLowerCase()

? ? };

}

function getDeviceType() {

? ? var result = '';

? ? var browser = getBrowser();

? ? if (browser.versions.ios || browser.versions.iPhone || browser.versions.iPad) {

? ? ? ? result = 'ios';

? ? ? ? console.log(result);

? ? ? ? return result;

? ? } else if (browser.versions.android) {

? ? ? ? result = 'android';

? ? ? ? console.log(result);

? ? ? ? return result;

? ? } else {

? ? ? ? console.log(result);

? ? ? ? return result;

? ? }

}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容