iOS解析---WebView和js交互原理
来源:互联网 发布:潍坊行知2016升学率 编辑:程序博客网 时间:2024/06/05 22:47
目前在网上看到很多介绍IOS里面WebView和JavaScript交互的文章。如果你想用网页去写一个app,那么我推荐 你去用PhoneGap (它是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台)。如果你网页只是你app的一部分那么还是要去了解一下它们之间交互的原理。
现在,我来为大家分析一下其中的原理。其实很简单,在IOS中,WebView和JavaScript直接的调用就是一个实例方法、一个回调代理:
首先来看WebView调用js的方法:
//调用特定的js方法 [_myWebView stringByEvaluatingJavaScriptFromString:@"myFunction('Hello,js!');"];
其中myFunction()为你的html页面里边早已写好的js函数。至于穿不穿参数,看你的选择。
接下来是js调用WebView的方法,原理就是利用WebView的代理方法:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{}
这个代理将会在js调用document.location的时候相应。接下来我们要定义好它们之间的暗号。
function sendCommand(cmd,param){ var url="testapp:"+cmd+":"+param; document.location = url; }
我们定义以testapp:开头的url为我们的暗号。接下来是在代理里边识别该暗号:
#pragma mark - UIWebViewDelegate- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ static int count = 1; NSString *requestString = [[request.URL absoluteString]stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];; NSArray *components = [requestString componentsSeparatedByString:@":"]; if ([components count] > 1 && [(NSString *)[components objectAtIndex:0] isEqualToString:@"testapp"]) { //解析约定的指令 if([(NSString *)[components objectAtIndex:1] isEqualToString:@"alert"]) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"消息%d",count++] message:[components objectAtIndex:2] delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; [alert show]; } return NO; } return YES;}
大功告成!是不是很简单~ 只要我们定义好了传递的暗号,我们就可以让双方相互“通信”了!
下面列出我写的两个demo:第一个是修改的WebViewJavascriptBridge的代码,地址。第二个demo是我根据交互原理自己实现的代码,地址。希望这两个demo能够帮到你。
0 0
- iOS解析---WebView和js交互原理
- iOS解析---WebView和js交互原理
- iOS解析---WebView和js交互原理
- iOS webview 和 js 交互
- iOS webView和JS简单交互处理
- iOS中WebView和JS的交互
- iOS中webview和js的交互
- iOS中webView和JS交互
- iOS webView js和Objective c交互
- iOS WebView JS 交互
- WebView和js交互
- WebView和js交互
- webview和js交互
- webview和js 交互
- webview和js交互
- WebView和JS交互
- Webview和js交互
- iOS webView 与js交互
- 关于Java中变量初始化问题
- 我的COM和ATL的学习
- 我的QML学习笔记-前言
- C++字符串转化为数字的库函数
- [HDU 4747 Mex] Mex函数 线段树
- iOS解析---WebView和js交互原理
- matlab rand函数详解
- ActivityGroup基本菜单的实现和弹出菜单的实现
- 交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的?
- mysql 5.6 免安装,启动的时候存在的问题
- 程序员面试简历注意事项
- 面向对象编程的弊端
- 黑马程序员-----Hello Word!!
- 开源夏令营之foldcolumn工具及解决方案(七)测试与总结