iOS与JS交互详解

这次给大家带来ios与js交互的三个需要注意点的点,ios与js交互的注意事项有哪些,下面给大家举三个经典案列,我们一起来看一下。

1使用CocoaPods导入WebViewJavascriptBridge

这里我们使用最新版本

pod ‘WebViewJavascriptBridge’, ‘~> 5.0.5’

导入工程的shell命令这里我就不多说了。

2. 编写OC代码(先写oc代码还是Js代码都可)

引入头文件#import “WebViewJavascriptBridge.h”

创建两个属性

@property (nonatomic, strong) UIWebView * webView;@property WebViewJavascriptBridge* bridge;初始化WebView和WebViewJavascriptBridge self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds];  [self.view addSubview:self.webView];  /**开启日志*/  [WebViewJavascriptBridge enableLogging];  /**初始化-WebViewJavascriptBridge*/  self.bridge = [WebViewJavascriptBridge bridgeForWebView:self.webView];  [self.bridge setWebViewDelegate:self];

登录后复制

3. JS调用OC代码

NOTICE:我们在写这里的调用代码之前,我们一定要知道前端js函数里一定要知道函数名称。这个很重要。
这里我们假设前端有个函数名称是callViewLoad他要调用OC的代码给返回来的数据最列表处理。

看看OC的代码如何处理Js发来的请求

[self.bridge registerHandler:@”callViewLoad” handler:^(id data, WVJBResponseCallback responseCallback) {    NSLog(@”前端发送的数据 %@”, data);    if (responseCallback) {    // respons给前端的数据
   responseCallback(@{@”UName”: @”洲洲哥的技术博客”,@”URLS”:@”http://www.jianshu.com/users/1338683b18e0/latest_articles”});
   }
   }];

来说说这里的参数说明
handler的回调中有data、responseCallback两个参数

这其中的data是前端js函数给后端传送的数据:比如在登陆的时候,就要把账户信息和用户密码传入后端,给后端处理。这里的data就是存放着两个数据的

responseCallback是我们要给前端js函数返回的数据内容,前端给我们传入了用户名和密码,我们调用接口之后返回登陆结果给前端就是要用他了。但是以字典形式返回。

到这里我们的JS调用OC,oc端的代码已经说完了。

前端JS代码的写法

html的代码写法

            OC和JS互动Web                    /*这段代码是固定的,必须要放到js中*/            function setupWebViewJavascriptBridge(callback) {                if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }                if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }                window.WVJBCallbacks = [callback];                var WVJBIframe = document.createElement('iframe');                WVJBIframe.style.display = 'none';                WVJBIframe.src = 'wvjbscheme://BRIDGE_LOADED';                document.documentElement.appendChild(WVJBIframe);                setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)            }                /**与OC交互的所有JS方法都要放在此处注册,才能调用通过JS调用OC或者让OC调用这里的JS*/        setupWebViewJavascriptBridge(function(bridge) {             /**OC调用JS代码不含参数*/             bridge.registerHandler('UserLogin', function() {                                    alert('UserLogin')             })             /**OC调用JS代码含参数*/             bridge.registerHandler('UserLoginInfo', function(data, responseCallback) {                    responseCallback({'userId': '123456', 'Names': 'ZHOUZHOUGEDEBOKE'})            })                                                  // **********************************JS调用OC             bridge.callHandler('callViewLoad', {'blogURL': 'http://www.henishuo.com'}, function(responseCallback){                                            alert(responseCallback.UName)             })        })                        

登录后复制

我们这里主要看html代码中的callViewLoad函数。这个就是他调用oc函数证明。这里的callHandler的里的参数可以看看

第一个参数callViewLoad :函数名

{‘blogURL’: ‘http://www.henishuo.com’}:表示给OC代码传入的数据

function(responseCallback) : 接受成功返回的JS函数这里可以在后端成功返回之后在这里我们可以监听到。和OC的Block类似。

这个函数的说明:JS给ObjC提供公开的API,ObjC端通过注册,就可以在JS端调用此API时,得到回调。ObjC端可以在处理完成后,反馈给JS,这样写就是在载入页面完成时就先调用。

NOTICE:这里只说了JS调用OC代码的声明。间间单单的介绍了一个方法的使用。但是我们也看到了再写前端JS函数的时候,有那么一大坨代码是必须要写的。不然是不会产生联合效果的。

相信看了这些案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

相关阅读:

ES6 module语法加载 import export.

image与view标签上下有空隙的解决方法

为什么slot都是用在子组件

实现瀑布流布局的俩种方法

以上就是iOS与JS交互详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2785035.html

(0)
上一篇 2025年3月8日 17:18:51
下一篇 2025年3月8日 17:19:06

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 简单而又神奇的js特效-满天星星

    这次给大家带来一个简单但是又很好用的js特效代码,满天星星,怎么制作漫天星星?下面就是实战案例,一起来看一下。 代码已经贴在上面了,需要的朋友可以自己动手尝试一下这一段神奇的代码。 相关阅读: HTML中关于盒模型的总结 在HTML中各类型…

    2025年3月8日
    200
  • 怎样用原生JS封装自己需要的插件

    今天想和大家讨论一下我们在工作中对于插件的需求,我们写代码,并不是所有的业务或者逻辑代码都要抽出来复用。首先,我们得看一下是否需要将一部分经常重复的代码抽象出来,写到一个单独的文件中为以后再次使用。再看一下我们的业务逻辑是否可以为团队服务。…

    编程技术 2025年3月8日
    200
  • JS闭包的特性分析

    在body标签中,添加一个u标签,其id为node,ul标签下面有5个li标签。如何在点击不同的li 标签时,弹出其li下标? 1)首先需要获得ul节点  var  node = document.getelementsbyid(‘node…

    编程技术 2025年3月8日
    200
  • js原型详细介绍

    如果大家对js中的原型对象以及prototype属性十分熟悉的话对后面原型链以及继承的理解会十分的容易,这里想和大家分享自己对其的理解,  1  function Person(){ 2 } 3 Person.prototype.name …

    2025年3月8日
    200
  • js中Promise对象实例详解

    假设我现在有个实名验证页面,需要验证身份证号码和真实姓名,实名认证是到公安部系统验证(假设在前端验证),验证通过后我再将当前表单信息保存到提交到我自己后台保存; 方法一 不用promise //外层ajax,校验实名信息$.ajax({  …

    编程技术 2025年3月8日
    200
  • JS面向对象用法实例

    对象是包含了属性和方法的集合体。什么是面向对象呢? 面向对象就是一种编程思想,是一个概念。  在js中,通过一种叫做原型的方式来实现面向对象编程。 nbsp;html>        创建对象点击显示学生信息 //创建一个学生对象 v…

    编程技术 2025年3月8日
    200
  • js深拷贝实例探讨

    深度拷贝就是把父对象拷贝到子对象上,而且两者的内存和以后的操作都互不影响的拷贝,本文主要和大家分享js深拷贝实例探讨,希望能帮助到大家。 (1)方法1 function copy(obj1,obj2){  var obj2=obj2||{}…

    编程技术 2025年3月8日
    200
  • 监听JS变量的变化方法实例

    我现在有这样一个需求,需要监控js的某个变量的改变, 如果该变量发生变化,则触发一些事件, 不能使用timeinterval之类的定时去监控的方法, 不知道有比较好的解决方案么? 流行的MVVM的JS库/框架都有共同的特点就是数据绑定, 在…

    编程技术 2025年3月8日
    200
  • JS原生对象与内置对象区别详解

    一、JS的对象和类型 js中的所有事物都是对象,包括但不限于字符串、数值、数组、函数等等,还包括自定义对象。在红宝书中,将js分为五种基本类型:null、undefined、number、string、boolean和一种复杂类型:obje…

    2025年3月8日
    200
  • 几种js继承的式分享

    本文主要和大家分享几种js继承的式分别有原型继承、借用构造函数继承、组合继承、寄生式继承、寄生组合方式继承,希望能帮助到大家。 原型式继承 可以在不必预先定义构造函数的情况下实现继承,其本质是执行给定对象的浅复制。而复制得到的副本还可以得到…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论