@flyriselink/pai-sp-mobile
Version:
pai-sp-mobile 组件库
77 lines (72 loc) • 2.06 kB
JavaScript
let userAgent = ""
//#ifdef H5
//判断机型
userAgent = navigator.userAgent;
//#endif
function setupWebViewJavascriptBridge(callback) {
//判断ios 还是Android
if (/(iPhone|iPad|iPod|iOS)/i.test(userAgent)) {
console.log("-->>>调用-ios")
connectWebViewJavascriptBridgeIOS(callback)
} else {
console.log("-->>>调用-安卓")
connectWebViewJavascriptBridgeAndroid(callback)
}
}
//苹果注册事件监听
function connectWebViewJavascriptBridgeIOS(callback) {
if (window.WebViewJavascriptBridge) {
return callback(window.WebViewJavascriptBridge)
}
if (window.WVJBCallbacks) {
return window.WVJBCallbacks.push(callback)
}
window.WVJBCallbacks = [callback]
let WVJBIframe = document.createElement('iframe')
WVJBIframe.style.display = 'none'
WVJBIframe.src = 'https://__bridge_loaded__'
document.documentElement.appendChild(WVJBIframe)
setTimeout(() => {
document.documentElement.removeChild(WVJBIframe)
}, 0)
}
//安卓注册事件监听
function connectWebViewJavascriptBridgeAndroid(callback) {
if (window.WebViewJavascriptBridge) {
callback(WebViewJavascriptBridge)
} else {
document.addEventListener(
'WebViewJavascriptBridgeReady',
function() {
callback(WebViewJavascriptBridge)
},
false
);
}
}
export default {
call(name, data, callback) {
console.log("-->>>call-1")
setupWebViewJavascriptBridge(function(bridge) {
console.log("-->>>call-2:", name)
bridge.callHandler(name, data, callback)
})
},
register(names, callback) {
setupWebViewJavascriptBridge(function(bridge) {
if (!/(iPhone|iPad|iPod|iOS)/i.test(userAgent)) {
console.log("初始化-安卓")
bridge.init(function(message, responseCallback) {
console.log("-->>>初始化-安卓-成功")
responseCallback('');
});
}
names.forEach(item => {
bridge.registerHandler(item, (data, responseCallback) => {
console.log("-->>>register:", item)
callback(item, data, responseCallback)
});
});
})
}
}