H5与原生交互方式

使用的组件dsbridge.js

var bridge = {default:this,// for typescriptcall: function (method, args, cb) {var ret = '';if (typeof args == 'function') {cb = args;args = {};}var arg={data:args===undefined?null:args}if (typeof cb == 'function') {var cbName = 'dscb' + window.dscb++;window[cbName] = cb;arg['_dscbstub'] = cbName;}arg = JSON.stringify(arg)//if in webview that dsBridge provided, call!if(window._dsbridge){ret=  _dsbridge.call(method, arg)}else if(window._dswk||navigator.userAgent.indexOf("_dsbridge")!=-1){ret = prompt("_dsbridge=" + method, arg);}return  JSON.parse(ret||'{}').data},register: function (name, fun, asyn) {var q = asyn ? window._dsaf : window._dsfif (!window._dsInit) {window._dsInit = true;//notify native that js apis register successfully on next event loopsetTimeout(function () {bridge.call("_dsb.dsinit");}, 0)}if (typeof fun == "object") {q._obs[name] = fun;} else {q[name] = fun}},registerAsyn: function (name, fun) {this.register(name, fun, true);},hasNativeMethod: function (name, type) {return this.call("_dsb.hasNativeMethod", {name: name, type:type||"all"});},disableJavascriptDialogBlock: function (disable) {this.call("_dsb.disableJavascriptDialogBlock", {disable: disable !== false})}
};!function () {if (window._dsf) return;var _close=window.close;var ob = {//保存JS同步方法_dsf: {_obs: {}},//保存JS异步方法_dsaf: {_obs: {}},dscb: 0,dsBridge: bridge,close: function () {if(bridge.hasNativeMethod('_dsb.closePage')){bridge.call("_dsb.closePage")}else{_close.call(window)}},_handleMessageFromNative: function (info) {var arg = JSON.parse(info.data);var ret = {id: info.callbackId,complete: true}var f = this._dsf[info.method];var af = this._dsaf[info.method]var callSyn = function (f, ob) {ret.data = f.apply(ob, arg)bridge.call("_dsb.returnValue", ret)}var callAsyn = function (f, ob) {arg.push(function (data, complete) {ret.data = data;ret.complete = complete!==false;bridge.call("_dsb.returnValue", ret)})f.apply(ob, arg)}if (f) {callSyn(f, this._dsf);} else if (af) {callAsyn(af, this._dsaf);} else {//with namespacevar name = info.method.split('.');if (name.length<2) return;var method=name.pop();var namespace=name.join('.')var obs = this._dsf._obs;var ob = obs[namespace] || {};var m = ob[method];if (m && typeof m == "function") {callSyn(m, ob);return;}obs = this._dsaf._obs;ob = obs[namespace] || {};m = ob[method];if (m && typeof m == "function") {callAsyn(m, ob);return;}}}}for (var attr in ob) {window[attr] = ob[attr]}bridge.register("_hasJavascriptMethod", function (method, tag) {var name = method.split('.')if(name.length<2) {return !!(_dsf[name]||_dsaf[name])}else{// with namespacevar method=name.pop()var namespace=name.join('.')var ob=_dsf._obs[namespace]||_dsaf._obs[namespace]return ob&&!!ob[method]}})
}();
//
// module.exports = bridge;

H5主动调用原生方法以及返回数据

dsBridge.call('device.getDeviceNum',function(v){var json =  JSON.parse(v)console.log('获取到的原生设备',json)})
function echoSyn() {// call function with namespacevar ret=dsBridge.call("echo.syn",{msg:" I am echoSyn call", tag:1});alert(JSON.stringify(ret))
}


原生主动调用H5方法

原生代码

[dwebview callHandler:@"addValue" arguments:@[@3,@4] completionHandler:^(NSNumber * value){NSLog(@"%@",value);
}];[dwebview callHandler:@"syn.addValue" arguments:@[@5,@6] completionHandler:^(NSDictionary * _Nullable value) {NSLog(@"Namespace syn.addValue(5,6): %@",value);}];

H5端代码
 

dsBridge.register('addValue', function (r, l) {return r + l;
})// namespace test for syn functionsdsBridge.register("syn", {tag: "syn",addValue:function (r,l) {return r+l;}})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/760659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java项目开发之fastjson详解

Fastjson 是由阿里巴巴公司开发的一个 Java 语言编写的高性能 JSON 处理库。它主要用于 Java 对象与 JSON 数据格式之间的转换&#xff0c;提供了简单易用的 API 来实现序列化&#xff08;Java 对象转 JSON 字符串&#xff09;和反序列化&#xff08;JSON 字符串转 Java 对象&a…

windows c++ 不堵塞 监听键盘输入 历史记录

windows c 不堵塞 监听键盘输入 支持修改已经输入的内容,并且记录最近30条记录,多了覆盖,通过上下方向按键来显示历史记录 代码如下&#xff1a; #include <iostream> #include <windows.h> #include <vector> #include <string>int main() {std::ve…

linux下用docker部署es和kibana

在linux下用docker部署es和kibana 1、在某个文件夹下创建docker-compose.yml文件&#xff0c;并把以下内容copy进去 version: 3 services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0container_name: elasticsearchenvironment:- discovery.ty…

微信小程序外卖跑腿点餐(订餐)系统(uni-app+SpringBoot后端+Vue管理端技术实现)

项目介绍 自从计算机发展开始&#xff0c;计算机软硬件相关技术的发展速度越来越快&#xff0c;在信息化高速发展的今天&#xff0c;计算机应用技术似乎已经应用到了各个领域。 在餐饮行业&#xff0c;除了外卖以外就是到店里就餐&#xff0c;在店里就餐如果需要等待点餐的话…

Java基础--集合

集合 1.可以动态的保存任意多个对象&#xff0c;使用比较方便。 2.提供了一系列方便的操作对象的方法&#xff1a;add&#xff0c;remove&#xff0c;set&#xff0c;get等。 3.使用集合添加&#xff0c;删除新元素的示意代码&#xff0c;简介明了。 集合主要是两种&#xff0…

罗技G29游戏方向盘试玩拆解,带震动力反馈

1.正好有时间记录下 自己的爱好 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 2.拆解 3.2个大电机 4.主控芯…

全新体验|德克萨斯州奥斯汀市登陆 The Sandbox

以前所未有的方式探索德克萨斯州奥斯汀——The Sandbox迎来虚拟旅游&#xff0c;新体验由Smobler工作室打造。 我们的使命是为虚拟旅游创造新机遇&#xff0c;让每个人都能更方便地游览城市和国家。我们非常兴奋地宣布&#xff1a;Cobbleland&#xff1a;Austin&#xff0c;这款…

城市排涝与海绵城市规划设计中的水文水动力模拟技术

原文链接&#xff1a;城市排涝与海绵城市规划设计中的水文水动力模拟技术https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247598401&idx3&sn0c4c86b3a5d09a75b8f07e6fad81aa9c&chksmfa8200a6cdf589b0970a6854869e8e3a9f132fe40a19977863c091cbcf6d9786f…

个位数统计

给定一个 k 位整数 Ndk−1​10k−1⋯d1​101d0​ (0≤di​≤9, i0,⋯,k−1, dk−1​>0)&#xff0c;请编写程序统计每种不同的个位数字出现的次数。例如&#xff1a;给定 N100311&#xff0c;则有 2 个 0&#xff0c;3 个 1&#xff0c;和 1 个 3。 输入格式&#xff1a; …

赋能 DevOps:平台工程的关键作用

在当今快节奏的数字环境中&#xff0c;DevOps 已成为寻求简化软件开发和交付流程的组织的关键方法。DevOps 的核心在于开发和运营团队之间协作的概念&#xff0c;通过一组旨在自动化和提高软件交付生命周期效率的实践和工具来实现。 DevOps 实践的关键推动因素之一是平台工程。…

c语言(自定义类型——结构体)

C语⾔已经提供了内置类型&#xff0c;如&#xff1a;char、short、int、long、float、double等&#xff0c;但是只有这些内置类 型还是不够的&#xff0c;假设我想描述学⽣&#xff0c;描述⼀本书&#xff0c;这时单⼀的内置类型是不⾏的。描述⼀个学⽣需要 名字、年龄、学号、…

libVLC 元数据

libVLC是一个开源的多媒体框架&#xff0c;主要用于处理和播放各种类型的媒体文件&#xff0c;如视频、音频等。 媒体元数据&#xff08;Metadata&#xff09;&#xff1a;包括媒体文件的基本信息&#xff0c;如标题、艺术家、专辑、持续时间、分辨率、比特率、编码格式等。 …

Docker【安装redis】【redis-desktop-manager】

文章目录 前言一、建立挂载目录二、下载运行镜像三、安装redis可视化工具redis-desktop-manager 前言 本文开始默认你已经安装了docker&#xff0c;如果对此还不够了解请看这篇文章&#xff1a;docker的安装 一、建立挂载目录 一般对应mysql、redis这种存储数据的镜像&#x…

RESNET的复现pytorch版本

RESNET的复现pytorch版本 使用的数据为Object_102_CaDataset&#xff0c;可以在网上下载&#xff0c;也可以在评论区问。 RESNET模型的亮点 1.提出了残差模块。 2.使用Batch Normalization加速训练 3.残差网络&#xff1a;易于收敛&#xff0c;很好的解决了退化问题&#…

【C++】狗屁不通文章生成器2.0

【C】狗屁不通文章生成器2.0 1 前言2 改进2.1 字词的前后关系2.2 文章生成系统 3 实现(部分)3.1 class wordpair3.1.1 转化为 json3.1.2 添加后缀词3.1.3 选择后缀词 3.2 class createArticle3.2.1文本分割3.2.2生成文章 4演示4.1 wordpair(3x2), 启动词(春天)4.2 wordpair(2x1…

Vue按需加载:提升应用性能的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【进程概念】进程控制块task_struct-PCB

文章目录 进程的概念如何描述进程?**为什么要描述一个进程**&#xff1f;进程描述--PCBtask_struct 组织进程查看进程通过系统调用获取进程标示符getpid()以及getppid() 进程的概念 在【百度百科】中&#xff0c;关于进程---- 狭义定义&#xff1a;进程是 正在运行 的程序的实…

本地有一个face.txt文档,里面是50条url图片链接。python做一下数据增强,额外再生成200张。

数据增强在图像处理领域通常指的是通过对原始图像进行一系列变换&#xff08;如旋转、缩放、裁剪、添加噪声等&#xff09;来生成新的图像样本&#xff0c;以增加模型的泛化能力。然而&#xff0c;对于URL链接来说&#xff0c;我们无法进行这种直接的图像变换。不过&#xff0c…

若依ruoyi-vue中的文件上传和下载

文章目录 文件上传后端实现前端实现 文件下载后端实现前端实现 在若依&#xff08;Ruoyi&#xff09;框架中&#xff0c;结合 Vue 前端框架&#xff0c;文件的上传和下载通常使用以下方法实现&#xff1a; 文件上传 若依现成的功能里面没有文件上传&#xff0c;但是集成了文件…

基于php健身房管理系统flask-django-python

根据现实需要&#xff0c;此系统我们设计出一下功能&#xff0c;主要有以下功能模板。 &#xff08;1&#xff09;前台功能&#xff1a;首页、运动器材、教练信息、营业信息、公告栏、在线留言、后台管理、个人中心。 &#xff08;2&#xff09;会员功能&#xff1a;首页、个人…