vue项目的H5如何通过WebViewJavascriptBridge和原生通信
首先创建一个bridge.js文件
(function(global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? (module.exports = factory())
: typeof define === 'function' && define.amd ? define(factory) : (global.JSBridge = factory())
})(this, function() {
'use strict'
var JSBridge = {
init() {
this.ready(function() {})
},
ready(callback) {
if (window.WebViewJavascriptBridge) {
return callback(WebViewJavascriptBridge)
} else {
document.addEventListener(
'WebViewJavascriptBridgeReady',
function() {
callback(WebViewJavascriptBridge)
},
false
)
if (window.WVJBCallbacks) {
return window.WVJBCallbacks.push(callback)
}
window.WVJBCallbacks = [callback]
var WVJBIframe = document.createElement('iframe')
WVJBIframe.style.display = 'none'
WVJBIframe.src = 'https://__bridge_loaded__'
document.documentElement.appendChild(WVJBIframe)
setTimeout(function() {
document.documentElement.removeChild(WVJBIframe)
}, 0)
}
},
callHandler(handName = null, param = null, callback = null) {
window.WebViewJavascriptBridge &&
window.WebViewJavascriptBridge.callHandler(handName, param, callback)
},
registerHandler(handName = null, callback = null) {
window.WebViewJavascriptBridge &&
window.WebViewJavascriptBridge.registerHandler(
handName,
(data,
responseCallback => {
callback(data, responseCallback)
})
)
},
takePhoto(callback) {
this.callHandler('openTakepicture', null, (response) => {
callback && callback(response);
});
},
openPictureBroswer(imgUrl, callback) {
this.callHandler('openPictureBroswer', imgUrl, response => {
callback && callback(response)
})
}
}
JSBridge.init()
return JSBridge
})
在main.js中引用成全局
import jsbridge from './tools/jsbridge.js'
Vue.prototype.$jsbridge = jsbridge
在vue某个页面中点击拍照的函数中使用
takePhoto() {
this.$jsbridge.takePhoto()
}