问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

webviewjavascriptbridge之js与ios桥接篇 在h5里加什么代码

发布网友 发布时间:2022-04-20 02:10

我来回答

3个回答

懂视网 时间:2022-04-20 06:31

HBuilder用来写H5项目,Xcode用来写iOS原生的插件,我所需实现的是,在H5页面点击打印,运行iOS原生插件来实现连接蓝牙打印机并打印出获取的内容。

首先去HBuilder文档上,下载HBuilder离线打包iOS版SDK,运行HBuilder-Hello,在HBuilder-Hello项目基础上开始进行原生插件开发。

HTML5+ 基座扩展采用三层结构,JS层、PluginBridge层和Native层。 三层功能分别是:
JS层: 在Webview页面调用,触发Native层代码,获取执行结果。 PluginBridge层: 将JS层请求进行处理,触发Native层扩展插件代码。
Native层: 插件扩展的平台原生代码,负责执行业务逻辑并执行结果返回到请求页面。

先来注册下对应关系
修改PandoraAPI.bundle中feature.plist文件,在其中添加JS插件别名和Native插件类的对应关系,SDK基座会根据对应关系查找并生成相应的Native对象并执行对应的方法。

plugintest为你所要扩展的插件类的类名,在iOS中创建plugintest类,并继承于PGPlugin,在.h中导入PGPlugin.h,PGMethod.h

 #include "PGPlugin.h"
 #include "PGMethod.h"

若需要静态库的话直接吧.a和.h文件拖到项目中就可以了,native中的方法分同步和异步方法,我在这里只介绍异步方法

- (void)PluginTestFunctionArrayArgu:(PGMethod *)msg
{
 NSArray *pArray = [NSArray array]; if (msg)
 { //CallBackid 异步方法的回调id,H5+ 会根据回调ID通知JS层运行结果成功或者失败
 NSString *cdId = [msg.arguments objectAtIndex:0]; //用户的参数会在第二个参数传回,可以按照Array方式传入
 pArray = [msg.arguments objectAtIndex:1];
 NSLog(@"cdId: %@ pArray: %@",cdId,pArray); // 如果使用Array方式传递参数
 NSString *pResultString = [NSString stringWithFormat:@"%@ %@ %@ %@ %@ %@ %@",[pArray objectAtIndex:0],[pArray objectAtIndex:1], [pArray objectAtIndex:2],[pArray objectAtIndex:3],[pArray objectAtIndex:4], [pArray objectAtIndex:5],[pArray objectAtIndex:6]];
 NSLog(@"pResultString: %@",pResultString); //可以直接调用所导入的静态库里面的方法
 NSString *UUID = [ZQDeviceSDK Prn_GetPortList:1];
 NSString *port = [UUID stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
 [self startPrintText:pArray andUUID:port]; // 运行Native代码结果和预期相同,调用回调通知JS层运行成功并返回结果
  PDRPluginResult *result = [PDRPluginResult resultWithStatus:PDRCommandStatusOK messageAsString:pResultString]; // 如果Native代码运行结果和预期不同,需要通过回调通知JS层出现错误,并返回错误提示// PDRPluginResult *resultError = [PDRPluginResult resultWithStatus:PDRCommandStatusError messageAsString:@"出错了!"];
 //通知JS层Native层运行结果,JS Pluginbridge会根据cbid找到对应的回调方法并触发
 [self toCallback:cdId withReslut:[result toJSONString]];
 }
}

在js中的函数

document.addEventListener( "plusready", function(){ // 声明的JS“扩展插件别名”
 var _BARCODE = 'plugintest',B = window.plus.bridge; var plugintest ={  // 声明异步返回方法
  // 通知Native层plugintest扩展插件运行”PluginTestFunction”方法
 //参数为所需传入原生的参数
  PluginTestFunctionArrayArgu : function (Argus, successCallback, errorCallback ){  var success = typeof successCallback !== 'function' ? null : function(args) 
  {
   successCallback(args);
  },
  fail = typeof errorCallback !== 'function' ? null : function(code) 
  {
   errorCallback(code);
  };
  callbackID = B.callbackId(success, fail);  //这里写上原生中的异步方法名
  return B.exec(_BARCODE, "PluginTestFunctionArrayArgu", [callbackID, Argus]);
  } 
 window.plus.plugintest = plugintest;
 }, true );

在H5中调用的代码

plus.plugintest.PluginTestFunctionArrayArgu( printData, function( result ) {
   mui.alert( result );
  },function(result){
   mui.alert(result)
   });

大致的开发流程就值这个样子,其实真正麻烦的并是不代码而是IDE的各种调试..
下面就是把H5项目导入Xcode来实现离线打包了,在项目的manifest.json中,修改appid,使其与Xcode中的appid一致,Version和Build对应version下的name和code

将manifest.json中的中文注释全部删除,然后把H5项目导入到Pandora下的www目录中,记住,把项目下的所有文件导入到www下,而不是项目文件夹直接导入到www下,那样运行会打不开App。

把www上一级的文件夹名称改为Appid一致的名称,修改图标可以把图标放入HBuilder中可以生成相应尺寸的图标..这点儿用着非常亲民..之前iOS开发都是去找美工要的..接着修改项目名称等我就不再一一说了。

【相关推荐】

1. 免费h5在线视频教程

2. HTML5 完整版手册

3. php.cn原创html5视频教程

热心网友 时间:2022-04-20 03:39

HTML5开发如火如荼,Web App的应用也是如日中天,前端开发难免会遇到Javascript与IOS交互的问题,目前最常用的是插件WebViewJavascriptBridge的运用。
JS调用IOS端的方法如下:

[javascript] view plain copy print?
var a = window.WebViewJavascriptBridge;
a.sendMessage(JSON.stringify({
cmd : 1
}));
这样IOS端就会收到来自前端JS发来的对象 {"cmd":1}。
至于接收来自IOS端发来参数的方法稍后续上。

热心网友 时间:2022-04-20 04:57

1)通过一个类的全限定名来获取定义此类的二进制字节流。
2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
3)在java堆中生成一个代表这个类的Class对象,作为访问方法区中这些数据的入口。
iOS APP与H5交互的三种方法

_jsBridge = [WebViewJavascriptBridge bridgeForWebView:_webView];2.方法调用 1)oc调js方法(通过data可以传值,通过 response可以接受js那边的返回值 )2)js调oc方法(可以通过data给oc方法传值,使用responseCallback将值再返回给js)最后:iOS调用H5方法 UIWebView: NSString *result = [webV...

深入浅出JSBridge:从原理到使用

对于Native->Web通信,Android 4.4之前可通过loadUrl实现,但无法执行回调。Android 4.4之后和iOS支持evaluateJavascript来执行JS代码,并获取返回值执行回调。iOS中使用stringByEvaluatingJavaScriptFromString或evaluateJavaScript。Web->Native通信有两种常见方式:拦截Webview请求的URL Schema和向Webview中注入JS ...

JSBridge原理 - 前端H5与客户端Native交互

2. JSBridge作为Web与原生代码间的通信桥梁,通过协定协议实现双向通信,解决混和应用中H5与Native之间的交互问题。它允许Web端调用Native端的Java接口,反之亦然。3. JSBridge实现原理基于Client/Server模式,充当类似HTTP协议的角色。其关键步骤包括封装原生接口为JavaScript接口,以及封装Web接口为原生接口。在...

如何在ios中使用web view控件?

创建 WKWebView 并加载 H5 页面:在你的 iOS 应用程序中创建一个 WKWebView 实例,并使用 loadHTMLString 或 loadRequest 方法加载 H5 页面。JavaScript 与原生代码交互:使用 WKWebView 的 WKScriptMessageHandler 协议,实现 JavaScript 与原生代码的交互。这允许你在 JavaScript 中调用原生代码,并传递...

JSBridge是什么

流程:H5->通过某种方式触发一个url->Native捕获到url,进行分析->原生做处理->Native调用H5的JSBridge对象传递回调。我们前面讲过了原生的WebView/UIWebView控件已经能够和Js实现数据通信了,那为什么还要JSBridge呢? 其实使用JSBridge有很多方面的考虑:Android4.2以下,addJavascriptInterface方式有安全漏掉...

一文迅速了解JSBridge 原理与实践

JSBridge原理与实践速览 在H5页面与端上应用交互中,WebView充当了关键角色。当H5需要借助Native端的功能时,JSBridge作为连接两者的关键桥梁,实现了Web端与Native端的双向通信,让信息和能力得以共享。它依赖于WebView提供的接口,尤其在Android和iOS的高低版本WebView差异中,其实现策略有所不同。WebView...

iOS WKWebView与H5交互,JS调OC传值、OC调JS传值、进度条加载等(干货...

1: webview加载完成前,将用户信息传给js 2: webview加载完成,将相关信息传给js 3: 调用相册或相机时,将选择的图片请求后台接口,后台返回图片地址,将该地址回传给H5,H5将图片显示到页面上 第一个例子: webView加载完成前传值 因为 evaluateJavaScript 方法默认是在加载完成后调用,所以直接...

想学习oc调用js和h5有什么能看的书吗

1. 苹果的javascriptcore.framework框架;2.跨平台cordova框架;3.oc第三方WebViewJavascriptBridge;4.还有直接就是设置自定义协议,然后在 webView的"- (BOOL) webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType"代理...

H5 与Native的交互方案

在android里是使用webview的loadUrl进行调用的 有两种比较好的方式:JS端可以直接调用:alert(AndroidJS.getUserData()) //UserDate 基于 callHandler 和 registerHandler的方式,比较干净 1、 Web 与 App 数据交互原理和实现 2、 WK 与 JS 的那些事 3、 H5 与 Native 交互之 JSBridge 技术 4、 ...

hybird App原理

Native响应JavaScript: Native作为H5的主导者,拥有更广阔的权限,直接执行JS代码,如通过Webview API。JsBridge的实现则是通过客户端SDK,将JS部分(桥接)和Native部分(SDK)无缝集成。通过白名单机制,页面加载时自动引入bridge.js,简化维护,降低接入难度,同时方便第三方页面的接入。接入方式的对比 在线...

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
嵌入式软件测试与其他软件测试的区别?嵌入式测试突出的特点是什么_百度... 嵌入式基础知识-测试基础概念 嵌入式软件测试基本信息 有什么手机软件兼职可以赚钱吗? 声码器原理 协议离婚房产过户需要什么样的手续 九阳豆浆机转了一下听到不正常声音后指示灯就灭了在怎么弄都不着了请 ... 微信里免费送九阳豆浆机还可以做兼职是真的吗? ...原999元的,让好友砍价,砍到0元,九阳豆浆机就送你了,是真的吗... 猴、猿、人-思考人性的起源内容简介 太阳能发电板后面的电器元件叫什么名字? 2块120W太阳能发电板电压17.5v的要什么样的配件,才能给220ⅴ家里电灯,电视用电? 太阳能发电板需要什么配件支持 华为p40与p40pro的区别 被封了15天,到时间会自动解封么? 被封了15天,到时间会自动解封么? 被盗了,然后骗子那边显示是被封号15天,不知道是不是真的? 光遇封号15天蜡烛还在吗 被封十五天官方明确期间不可有任何操作若有将永久封禁在此期间登录时显示该帐号未注册该如何解决? 微信诈骗被封了15天 还能回来吗? 被封了15天,到时间会自动解封么?会不会影响信誉 封了15天怎么解封? 被封15天,是有哪些原因? 被封了15天,到时间会自动解封么? 外交部小语种待遇 外交部研究生工资待遇 websocket即时通讯返回的数据如何渲染到页面 怎么样使用OPPO Reno3炫彩模式拍照呢? OPPO Reno3 Pro相机拍照如何设置? 为什么我的iphone4关机以后一打开程序就自动关闭 我想注册个做微商的,怎么注册 怎么申请很多 急求wacom影拓pth-651的手绘板驱动!谢谢! wacom影拓PTH-651/k在用PS6绘画时会压感失灵,出现直直的粗线。驱动下载最新的,并且从新安装好几次了。 手绘板wacom PTH-651未找到驱动程序 影拓5PTH651电脑无法识别数位板也无法安装驱动程序 我的影拓pth651驱动每天都出问题是什么情况? 我买的是影拓pro PTH-651根据光盘步骤显示安装好驱动后 打开系统设置找到数位板还是不行 wacom PTH-651 还有XP系统的驱动么 影拓PTH651支持系统XP吗 求救!很急!影拓5pth-651,之前安装过一次,可以正常使用,之后就把它拔了,大概两周后再拿出来 为什么在苹果por笔记本上安装不了影拓5数位板pth-651/k的驱动 请问新出的PTH651与之前的影拓5-PTH650相比较,有无实质上的软、硬件改进?触控体验是否得到了提升? 影拓5 PTH651 一按按钮 驱动就未找到 我是影拓PTH651.。。刚买的。用了一次后。。再接上按键就不能用了。。压感也没有。。重装程序也是那样 安卓内嵌h5能够手势滑动功能,而ios不能实现为什么 东莞工伤十级伤残赔偿多少钱 东莞工伤十级大概赔几万 东莞10级工伤赔偿标准 水溶性透明增稠剂种类?