移动应用中许多复杂的且经常改动的页面会使用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. 一台电脑,两个及多个git账号配置

    1. 生成两[三]个ssh公钥私钥 方法参照:http://www.cnblogs.com/fanbi/p/7772812.html第三步骤 假定其中一个是id_rsa, 另一个时id_rsa_two ...

  2. java多线程快速入门(十四)

    使用atomicInteger解决了原子性问题(AtomicInteger保证每次只能一个线程操作count) package com.cppdy; import java.util.concurre ...

  3. Python中的各种转义符\n\r\t

    转义符 描述 \ 续行符(在行尾时) \\ 反斜杠符号 ' 单引号 " 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n 换行 \v 纵向制表符 \t 横 ...

  4. python 全栈开发,Day12(函数的有用信息,带参数的装饰器,多个装饰器装饰一个函数)

    函数的执行时,*打散.函数的定义时,*聚合. from functools import wraps def wrapper(f): # f = func1 @wraps(f) def inner(* ...

  5. 步步为营-62-Excel的导入和导出

    说明:NPOI组件的使用 1 添加引用 2 代码 using System; using System.Collections.Generic; using System.ComponentModel ...

  6. bootstrap 列表--水平定义列表

    水平定义列表就像内联列表一样,Bootstrap可以给<dl>添加类名“.dl-horizontal”给定义列表实现水平显示效果. @media (min-width: 768px) { ...

  7. Spring启动研究2.AbstractApplicationContext.obtainFreshBeanFactory()研究

    据说这个方法里面调用了loadBeanDefinitions,据说很重要,并且跟我感兴趣的标签解析有关,所以仔细看看 obtainFreshBeanFactory()这个方法在AbstractAppl ...

  8. IE下script标签的readyState属性

    在做加载器时遇到一个常见问题,如何判定一个脚本已经执行完毕. "uninitialized" – 原始状态 "loading" – 下载数据中 "lo ...

  9. python全栈开发day42-固定定位等

    一.今日内容: 1.绝对定位盒子居中用法 left:50% margin-left:-盒子的一半宽度.       2.固定定位和固定定位的用法 返回顶部 固定导航栏:        3.阿里的字体图 ...

  10. 【Java】 剑指offer(43) 从1到n整数中1出现的次数

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例 ...