ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

uniapp与原生交互

2022-01-21 15:34:52  阅读:358  来源: 互联网

标签:原生 uniapp function window call ._ dsf 交互 obs


1.项目中引入 DSBridge.js 文件

var bridge = {
    default: this,
    call: function(b, a, c) {
        var e = "";
        "function" == typeof a && (c = a, a = {});
        a = {
            data: void 0 === a ? null : a
        };
        if ("function" == typeof c) {
            var g = "dscb" + window.dscb++;
            window[g] = c;
            a._dscbstub = g
        }
        a = JSON.stringify(a);
        if (window._dsbridge) e = _dsbridge.call(b, a);
        else if (window._dswk || -1 != navigator.userAgent.indexOf("_dsbridge")) e = prompt("_dsbridge=" + b, a);
        return JSON.parse(e || "{}").data
    },
    register: function(b, a, c) {
        c = c ? window._dsaf : window._dsf;
        window._dsInit || (window._dsInit = !0, setTimeout(function() {
                bridge.call("_dsb.dsinit")
            },
            0));
        "object" == typeof a ? c._obs[b] = a : c[b] = a
    },
    registerAsyn: function(b, a) {
        this.register(b, a, !0)
    },
    hasNativeMethod: function(b, a) {
        return this.call("_dsb.hasNativeMethod", {
            name: b,
            type: a || "all"
        })
    },
    disableJavascriptDialogBlock: function(b) {
        this.call("_dsb.disableJavascriptDialogBlock", {
            disable: !1 !== b
        })
    }
};
! function() {
    if (!window._dsf) {
        var b = {
                _dsf: {
                    _obs: {}
                },
                _dsaf: {
                    _obs: {}
                },
                dscb: 0,
                dsBridge: bridge,
                close: function() {
                    bridge.call("_dsb.closePage")
                },
                _handleMessageFromNative: function(a) {
                    var e = JSON.parse(a.data),
                        b = {
                            id: a.callbackId,
                            complete: !0
                        },
                        c = this._dsf[a.method],
                        d = this._dsaf[a.method],
                        h = function(a, c) {
                            b.data = a.apply(c, e);
                            bridge.call("_dsb.returnValue", b)
                        },
                        k = function(a, c) {
                            e.push(function(a, c) {
                                b.data = a;
                                b.complete = !1 !== c;
                                bridge.call("_dsb.returnValue", b)
                            });
                            a.apply(c, e)
                        };
                    if (c) h(c, this._dsf);
                    else if (d) k(d, this._dsaf);
                    else if (c = a.method.split("."), !(2 > c.length)) {
                        a = c.pop();
                        var c = c.join("."),
                            d = this._dsf._obs,
                            d = d[c] || {},
                            f = d[a];
                        f && "function" == typeof f ? h(f, d) : (d = this._dsaf._obs, d = d[c] || {}, (f = d[a]) && "function" == typeof f &&
                            k(f, d))
                    }
                }
            },
            a;
        for (a in b) window[a] = b[a];
        bridge.register("_hasJavascriptMethod", function(a, b) {
            b = a.split(".");
            if (2 > b.length) return !(!_dsf[b] && !_dsaf[b]);
            a = b.pop();
            b = b.join(".");
            return (b = _dsf._obs[b] || _dsaf._obs[b]) && !!b[a]
        })
    }
}();

2.引入

import '../../util/DSBridge.js'

3.与原生交互

1.给原生传参数

var obj = {
  data : 'getDiagnosisImg ' ,
  name : ' img ' } dsBridge.call ( "AddImg" , obj)

js通过dsBridge.call() 方法传值
第一个参数:AddImg是约定注册的名称,与原生接收处方法名一致;
第二个参数是要传递的参数;

2.接收原生传给uni的值

dsBridge.register ( "getDiagnosis Img" , (res) =>{
  console.log (res)
})

第一个参数:getDiagnosisImg 是注册方法名,与原生保持一致;
第二个是js的方法,参数res就是原生返回给uni的值;

标签:原生,uniapp,function,window,call,._,dsf,交互,obs
来源: https://www.cnblogs.com/yundeblog/p/15830390.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有