iOS下的app和h5交互
2015-10-10 11:31
411 查看
在h5和native的交互过程中,我知道的有两个非常好用的框架WebViewJavascriptBridge_iOS和phonegap
这两种方法都能非常好的处理二者的交互,特别phonegap网上有很多现成的插件支持,是一个非常强大而又方便的工具,如果应用是一个二者交互特别重的app,可以考虑导入这个框架。 WebViewJavascriptBridge_iOS则是一个非常轻量级的框架,但是,但是
如果没有一个安卓 ios js都熟悉的人员,这两个框架想要导入到项目中,都是一个艰难的过程,为啥,因为语言不通。
二者的原理其实很简单,就像说你好,他说hello一样,下面我们不考虑使用框架,讲讲如何在ios中直接进行二者的交互,而且在简单的项目中,没有必要使用上面的两个框架
1,最简单的就是拦截url,匹配出自己所需的url,获取交互参数
我们主动发出一个
window.location.href
在后面跟着我们需要传送的参数,一般都是自己定义一种协议,拦截特定的协议,如下
window.location.href=
‘h5ToNative://methond?param1='
+
param1 +Ԧm2='
+
param2; 此方法会触发url跳转
即是会触发- (BOOL)webView:(UIWebView*)webView
shouldStartLoadWithRequest: (NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
注意:在使用这种方法的时候,发现如果h5在跳转页面的时候,同事触发这个方法,由于两个跳转是同样的操作,后面的操作会阻断前面的操作,也就是h5跳转和h5传参只能有一个起作用。
2 ajax请求 phogap用的就是这种方式
使用ajax请求,就要对
NSURLProtocol有了解,因为对ajax的拦截是在
NSURLProtocol的子类中进行,具体
NSURLProtocol是什么,或者怎么使用,不在这里讲解。
这种方法的核心代码就是ajax请求的发送,
functioniOSExec(code,json)
{
varexecXhr
= new
XMLHttpRequest();
execXhr.open('HEAD',
(newDate())+"/!/h5ToNative://methond?param1="+ param1+
"¶m2="+
param2,true);//设置scheme
varvcHeaderValue
=
/.*\((.*)\)/.exec(navigator.userAgent)[1];
execXhr.setRequestHeader('rc',1);
execXhr.send(null);
}
这种方法发送一个空的xmlhttpRuest请求,主要的就是url参数,在这里需要注意的是,因为我们需要对ajax请求拦截,并在canInitWithRequest返回YES,如果是同一个请求,再次请求的时候,是不能触发这个方法的,所以我们在请求的参数之前加了一个当前的时间newDate()
我们在进行解析的时候,可以完全忽略这个时间。
3 改变iframe,这种方法通过改变网页中一个隐藏的控件大小,触发- (BOOL)webView:(UIWebView*)webView
shouldStartLoadWithRequest: (NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType方法,进行拦截处理
WebViewJavascriptBridge_iOS用的就是这种方式
function TestIOSJS()
{
var messagingIframe;
messagingIframe = document.createElement('iframe');
messagingIframe.style.display = 'none';
document.documentElement.appendChild(messagingIframe);
messagingIframe.src = "";
}
这两种方法都能非常好的处理二者的交互,特别phonegap网上有很多现成的插件支持,是一个非常强大而又方便的工具,如果应用是一个二者交互特别重的app,可以考虑导入这个框架。 WebViewJavascriptBridge_iOS则是一个非常轻量级的框架,但是,但是
如果没有一个安卓 ios js都熟悉的人员,这两个框架想要导入到项目中,都是一个艰难的过程,为啥,因为语言不通。
二者的原理其实很简单,就像说你好,他说hello一样,下面我们不考虑使用框架,讲讲如何在ios中直接进行二者的交互,而且在简单的项目中,没有必要使用上面的两个框架
1,最简单的就是拦截url,匹配出自己所需的url,获取交互参数
我们主动发出一个
window.location.href
在后面跟着我们需要传送的参数,一般都是自己定义一种协议,拦截特定的协议,如下
window.location.href=
‘h5ToNative://methond?param1='
+
param1 +Ԧm2='
+
param2; 此方法会触发url跳转
即是会触发- (BOOL)webView:(UIWebView*)webView
shouldStartLoadWithRequest: (NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
注意:在使用这种方法的时候,发现如果h5在跳转页面的时候,同事触发这个方法,由于两个跳转是同样的操作,后面的操作会阻断前面的操作,也就是h5跳转和h5传参只能有一个起作用。
2 ajax请求 phogap用的就是这种方式
使用ajax请求,就要对
NSURLProtocol有了解,因为对ajax的拦截是在
NSURLProtocol的子类中进行,具体
NSURLProtocol是什么,或者怎么使用,不在这里讲解。
这种方法的核心代码就是ajax请求的发送,
functioniOSExec(code,json)
{
varexecXhr
= new
XMLHttpRequest();
execXhr.open('HEAD',
(newDate())+"/!/h5ToNative://methond?param1="+ param1+
"¶m2="+
param2,true);//设置scheme
varvcHeaderValue
=
/.*\((.*)\)/.exec(navigator.userAgent)[1];
execXhr.setRequestHeader('rc',1);
execXhr.send(null);
}
这种方法发送一个空的xmlhttpRuest请求,主要的就是url参数,在这里需要注意的是,因为我们需要对ajax请求拦截,并在canInitWithRequest返回YES,如果是同一个请求,再次请求的时候,是不能触发这个方法的,所以我们在请求的参数之前加了一个当前的时间newDate()
我们在进行解析的时候,可以完全忽略这个时间。
3 改变iframe,这种方法通过改变网页中一个隐藏的控件大小,触发- (BOOL)webView:(UIWebView*)webView
shouldStartLoadWithRequest: (NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType方法,进行拦截处理
WebViewJavascriptBridge_iOS用的就是这种方式
function TestIOSJS()
{
var messagingIframe;
messagingIframe = document.createElement('iframe');
messagingIframe.style.display = 'none';
document.documentElement.appendChild(messagingIframe);
messagingIframe.src = "";
}
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器
- IOS开发第三方语音-微信语音
- iOS开发之路--微博OAuth授权_取得用户授权的accessToken
- 基于UIControl控件实现ios点赞功能
- iOS开发中实现邮件和短信发送的简单示例