ios cordova 原生与js通讯原理

在ios中,cordova的CDVViewController继承了viewController,每一个h5的页面,都对应一个CDVVIewController,

里面都有一个webview,是ios中专门显示h5页面的view.

h5和原生端的交互,主要是通过插件的形式实现,原生这边写一个类继承CDVPlugin,然后实现方法,js那边封装好每个接口的方法,

最终通过调用cordova.js里的exec,传入服务类名,方法名,以及回调函数及参数等进行调用。

它的通讯原理是:有两种方法

1、通过iframe,cordova.exec函数里通过向Html插入一个不可见的iframe,从而会向UIWebView请求加载一个特殊的URL,

  url里包括了plugin插件的类名,方法名。

由于请求了url,这时会触发UIWeibviewDegate的shouldStartLoadWithRequest

这里会进入原生则,原生通过request获取类名和方法名进行处理

2、通过XHR,cordova.exec通过发起一个xhr请求,这时候就会被NSURLProtocol拦截

原生的canInitWithRequest就会被调用,从而进入到原生

原生调用js的方法,是直接通过stringByEvaluatingJavaScriptFromString直接调用js方法

时间: 2024-10-05 23:06:37

ios cordova 原生与js通讯原理的相关文章

iOS原生与H5交互WKWebView

一.原生与H5页面交互方式 登陆后将token放入wkwebview的cookie中.以后wkwebview也可以同步原生app的登陆状态了. 以下代码   @"document.cookie = 'UID=%@';document.cookie = 'CLIENT=App';document.cookie = 'TOKEN=%@'" 根据自己项目的cookie格式传递. 1 NSString *js = @"function clearCache(){localStorag

QQ通讯原理及QQ是怎么穿透内网的(转)

QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服务器,只不过不是常用的那些,那个服务器是腾讯自行开发的!!! 一.登录 QQ客户端在局域网内,当你打开QQ登录到QQ服务器时,通过外网,你的客户端与QQ服务器建立了一个长连接.你可以用netstat -bn  看到此连接的状态是 establish 此时,在QQ服务器那面看到的连接的IP是你们局域网对外的IP.举个例子:       QQ服务器      IP:12

原声JS瀑布流加延迟加载

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>瀑布流</title> <style> *{ margin: 0px; padding:0px; } .box{ position: relative; top:0px; } ul li{ list-style-type: none; posit

JS工作原理

JS工作原理 一浏览器组成可分两部分:Shell+内核.浏览器内核又可以分成两部分:渲染引擎(layout engineer或者Rendering Engine)和JS引擎.渲染引擎功能作用渲染引擎,负责对网页语法的解释(如HTML.JavaScript)并渲染网页. 所以,通常所谓的浏览器内核也就是浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息.不同的浏览器内核对网页编写语法 的解释也有不同,因此同一网页在不同的内核的浏览器里的渲染(显示)效果也可能不同,这也

http 基础与通讯原理

目录 http 基础与通讯原理 Internet 与中国 1990年10月 注册CN顶级域名 1993年3月2日 接入第一根专线 1994年4月20日 实现与互联网的全功能连接 1994年5月21日 设置CN域名服务器 1996年1月 正式进入Internet TCP/IP协议 socket 套接字 套接字转发过程 套接字连接过程 套接字相关系统函数 HTTP 服务 通讯过程 相关术语 工作机制 HTTP的多种连接模式 URL URL的组成 网站访问量 IP PV UV QPS PV,QPS,并

基于Netty的聊天系统(一)通讯原理篇

今天周六,正好顺便把聊天系统的通讯原理写一下,本来是用XMPP+Openfire做了一个聊天,但是在做群聊那块需要去写插件来主动向表里变去写数据,因为openfire外国人写的,最初设计的群聊是会议室那种形式,和我们现在这种QQ群聊还是有差别的,改造起来比较麻烦,需要去通都源码等等,openfire是基于mina来写的,mina和netty又出自同一作者之手,那么我们就基于netty来写一个吧,首先我们来谈一谈通讯的原理 1:通讯原理 首先比方说A和B两个人要进行聊天(这里我们先讨论一对一这种聊

IOS 基于APNS消息推送原理与实现(JAVA后台)--转

Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider. APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器. 上图可以分为三个阶段. 第一阶段:Push服务器应用程序把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的

【cocos2d-js官方文档】二十三、如何在IOS平台上使用js直接调用OC方法

在Cocos2d-JS v3.0 RC2中,与Android上js调用Java一样,Cocos2d-JS也提供了在iOS和Mac上js直接调用Objective-C的方法,示例代码如下: var ojb = jsb.reflection.callStaticMethod(className, methodNmae, arg1, arg2, .....); 在jsb.reflection.callStaticMethod方法中,我们通过传入OC的类名,方法名,参数就可以直接调用OC的静态方法,并且

[掌眼]iOS / Android / java / node.js 通用的 AES256 加解密算法

example.m NSString *text = @"text"; NSString *key32 = @"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding]; NSString *encryptedData = [[data AES256EncryptWithKey:key32] base64EncodedStringWi