移动应用中许多复杂的且经常改动的页面会使用H5进行代替native,这里就会使用到js和webview的交互

iOS里面,UIWebView提供了方法stringByEvaluatingJavaScriptFromString:使js和webview互通

这里我提供一种思路,仅供参考

1.加载js函数

var Test = {};
Test.platform = {
name: 'IOS'
};
// 返回App识别ID
Test.getAppId = function(){
return '[AppId]';
};
// 返回用户Id
Test.getUserId = function(){
return '[UserId]';
};
// 返回当前AppVersion
Test.getAppVersion = function(){
return '[AppVersion]';
};
Test.open = function(str){
setTimeout(function(){
document.location = 'Test://open/'+str;
},50);
};
window.Test = Test;

2.简单几个函数,加载前替换掉自己的value,

for (NSString *key in dict) {
NSString *placekey = [NSString stringWithFormat:@"[%@]", key];
NSString *value = [dict[key] stringValue];
if (! value || [value isEqual:[NSNull null]]) {
jsString = [jsString stringByReplacingOccurrencesOfString:placekey withString:@"null"];
}else{
jsString = [jsString stringByReplacingOccurrencesOfString:placekey withString:value];
}
}

3.加入webview的js里面:

   [webView stringByEvaluatingJavaScriptFromString:jsString];

当js调用native的操作时候,可以使用Test.open(firstViewController?paramter=123)
native的delegate将会调用:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

这里的request.url将会是:

Test://open/firstViewController?paramter=123

进入我们自己解析方法,对此url进行不同的解析和跳转

NSString *requestString = [[request URL] absoluteString];
NSArray *components = [requestString componentsSeparatedByString:@"://"]; if (components[0] && [components count] > 1) {//如果协议抬头为Test或者为其他则走自定义流程
NSString *content = components[1];
NSArray *controller = [content componentsSeparatedByString:@"/"];
if (controller.count > 1 && [controller[0] isEqual:@"open"]) {//打开特定的controller
[self openController:controller[1]];
}
} return NO;

iOS web view 与 js 交互的更多相关文章

  1. iOS下原生与JS交互(总结)

    iOS开发免不了要与UIWebView打交道,然后就要涉及到JS与原生OC交互,今天总结一下JS与原生OC交互的两种方式. JS调用原生OC篇(我自己用的方式二,简单方便) 方式一 第一种方式是用JS ...

  2. iOS WKWebView OC 与 JS 交互学习

    我写WKWebView 想让 服务端相应 一个 方法但是不响应,根据 UIWebView 用 JSContext就能拿到响应的处理经验是不是服务端 也需要 对 WKwebView有兼容的一个写法??? ...

  3. iOS中UIWebView使用JS交互 - 机智的新手

    iOS中偶尔也会用到webview来显示一些内容,比如新闻,或者一段介绍.但是用的不多,现在来教大家怎么使用js跟webview进行交互. 这里就拿点击图片获取图片路径为例: 1.测试页面html & ...

  4. iOS中UIWebView使用JS交互

    iOS中偶尔也会用到webview来显示一些内容,比如新闻,或者一段介绍.但是用的不多,现在来教大家怎么使用js跟webview进行交互. 这里就拿点击图片获取图片路径为例: 1.测试页面html & ...

  5. ios WKWebView 与 JS 交互实战技巧

    一.WKWebView 由于Xcode8发布之后,编译器开始不支持iOS 7了,这样我们的app也改为最低支持iOS 8.0,既然需要与web交互,那自然也就选择使用了 iOS 8.0之后 才推出的新 ...

  6. iOS(UIWebView 和WKWebView)OC与JS交互 之二

    在iOS应用的开发过程中,我们经常会使用到WebView,当我们对WebView进行操作的时候,有时会需要进行源生的操作.那么我记下来就与大家分享一下OC与JS交互. 首先先说第一种方法,并没有牵扯O ...

  7. iOS webView与js交互在文本空格上输入文字

    项目要求:webview加载html网址,内容为填空题型文本,需要在横线上添加答案,并点击提交按钮后再将答案进行回显 正常加载的效果图片: 这个是用js交互后的效果图: 点击空格,输入想输入的答案,如 ...

  8. iOS JS 交互之利用系统JSContext实现 JS调用OC方法以及Objective-C调用JavaScript方法

    ios js 交互分为两块: 1.oc调用js 这一块实现起来比较简单, 我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择拷贝到工程中,(拖入的文件夹是蓝色 ...

  9. iOS与Html5和JS之间的交互---学习笔记五

    首先采用的框架是WebViewJavascriptBridge,采用这套框架可以方便的使iOS与JS交互 一. 流程图(主要介绍思路) 二.iOS端如何使用 首先导入#import "Web ...

随机推荐

  1. navicat报caching_sha2_password异常

    使用navicat连接mysql报错(升级到mysql8版本时的错) 解决办法: 通过命令行登录mysql后, 输入: alter user 'root'@'localhost' IDENTIFIED ...

  2. html的结构-厂子型的布局

    上图所示的布局设计是很常见的.这个该怎么做呢? 技术需求:header 要固定住在顶部,不随鼠标滚动而向上移动:左边的div的有一定的宽度,但是要贴浏览器的底部(屏幕顶部):右边的dv要占据右边的全屏 ...

  3. rsa加密解密, 非对称加密

    2016年3月17日 17:21:08 星期四 现在越来越懒了.... 参考: http://www.xuebuyuan.com/1399981.html 左边是加密流程, 右边是解密流程 呃...有 ...

  4. sklearn.model_selection模块

    后续补代码 sklearn.model_selection模块的几个方法参数

  5. 调试Windows Service

    调试Windows Service 使用一般的调试方法调试不了Windows Servers,所以参考了一些调试方法 我服务源码中使用了Timer,注意不能使用工具箱内的Timer,用System.T ...

  6. == 和 equal 区别

    在初学 Java 时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = new String(" ...

  7. python魔法函数(二)之__getitem__、__len__、__iter__

    魔法函数会增强python类的类型,独立存在 __getitem class Company: def __init__(self, employees): self.employees = empl ...

  8. java 标签编译后没有显示

    1.原因现在还不知,试了几个地方可以和不可以 /** * @author feilong */ public class OverLoading { /**@param args put here c ...

  9. java uitl

    Random类  //生成随机数 https://i.cnblogs.com/EditPosts.aspx?opt=1

  10. PHP实现获取文件后缀名的几种常用方法

    方法1: function get_file_type($filename){ $type = substr($filename, strrpos($filename, ".")+ ...