app.js 1.56 KB
Newer Older
xuzhenghua committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
export default function SendMessageToApp() {

    let messageName = 'nullName'
    let params = '';
    let callback;

    //app定义的的方法名
    if (typeof arguments[0] == "string") {
        messageName = arguments[0]
    }

    //传递的参数或者回调函数
    let arg1 = arguments[1];
    if (typeof arg1 == "function") {
        callback = arg1
    }else if (typeof arg1 != "undefined") {
        params = arg1
    }

    //回调函数
    if (typeof arguments[2] == "function") {
        callback = arguments[2]
    }

    if (callback) {
        let fun_name = getFunName(callback)
        window[fun_name] = callback
    }

    if (window.webkit != undefined) {

        sendToIOS(messageName, params)
    }else{
        //貌似安卓传的参数,不能是数组和对象,所以这里json一下
        if (typeof params != "string") {
            params = JSON.stringify(params)
        }
        sendToAndroid(messageName, params)
    }
}

function sendToIOS(messageName, params) {
    window.webkit.messageHandlers[messageName].postMessage(params)
}

function sendToAndroid(messageName, params) {
    try {
        if (params.length > 0) {
            console.log("有参")
            AndroidWebViewBridge[messageName](params)
        }else{
            console.log("无参")
            AndroidWebViewBridge[messageName]()
        }
    } catch(error) {
        console.log(error)
    }

}

function getFunName(fn) {
    let res = fn.name.split(' ')
    if (res.length > 1) {
        return res[1]
    }else if (res.length > 0) {
        return res[0]
    }
}