㈠ js怎么跟Android和ios进行交互
与android交互:回
function onBtnClick() {
window.ncp.callOnJs("id");
}
与答objective-c交互:
function onBtnClick(cmd,parameter1)
{
document.write(Date());
document.location="objc://"+callOnJs+":/"+id;
}
㈡ 如何用js调用ios
基本流程:
先看一下Web中,我们给h1标签添加一个onclick事件,让它在被点击之后,修改当前的url。
Web中的HTML代码:
<html>
<head>
<script>
function getInfo(name)
{
window.location = "/getInfo/"+name;
}
</script>
</head>
<body>
<h1 onclick="getInfo('why')">Name</h1>
</body>
</html>
iOS中,先拖拽WebView,访问localhost,然后通过WebView的委托事件监听url跳转操作,并且把跳转截取下来。
也就是说,在onclick的时候,普通浏览器灰跳转到那个url,但是在iOS的这个WebView里面,这个跳转会被拦截,
用这种方式可以巧妙地实现JS调用iOS的原生代码:
//
// DWViewController.m
// DareWayApp
//
// Created by why on 14-6-3.
// Copyright (c) 2014年 DareWay. All rights reserved.
//
#import "DWViewController.h"
@interface DWViewController ()
@property (weak, nonatomic) IBOutlet UIWebView *myWebview; // 主页面
@end
@implementation DWViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 适配iOS6的状态栏
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
_myWebview.frame = CGRectMake(0,20,self.view.frame.size.width,self.view.frame.size.height-20);
}
// 加载制定的URL
NSURL *url =[NSURL URLWithString:@"http://localhost"];
NSURLRequest *request =[NSURLRequest requestWithURL:url];
[_myWebview setDelegate:self];
[_myWebview loadRequest:request];
}
// 网页中的每一个请求都会被触发
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
// 每次跳转时候判断URL
if([request.mainDocumentURL.relativePath isEqualToString:@"/getInfo/why"])
{
NSLog(@"why");
return NO;
}
return YES;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
㈢ (IOS)UIWebView和javaScript之间是怎么交互的
UIWebView是iOS SDK中渲染网面的控件,在显示网页的时候,可以hack网页然后显示想显示的内容。其中就要用至JavaScript的知识,而UIWebView与javascript交互的 方法就是,有了这个方法可以通过objc调用 javascript,可以注入 javascript
Js调用〇C方法原理就是利用UIWebView重定向请求,传一些命令到我们的 UIWebView,在UIWebView的delegate的方法中接收这些命令,并根据命令执行相应的objc 方法。这样就相当于在javascript中调用objc的方法。
扩展: 在android中,有固有组件webview,经过设置可以让它支持我们的js的渲染,然后在代码中设置(WebViewClient/WebChromeClient)让应用跳转页面时在本webview中跳 转,通过webview.loarl (String str)方法可以在需要的地方加载我们前端的页面或者调用 前端所定义的方法(wv.loadUrl(“javascript:sendDataToAndroid(‘我是js,能看到吗’)”);),再通过JavascriptInterface接口设置前端和android通讯的标识,
wv.addJavascriptInterface(new MJavascriptInterface(getApplicationContext()), “WebViewFunc”);
这样前端就可以在页面上调用我们的方法了,funl方法是在android中定义的 Window.WebViewFunc.fun1 ();
总之,前端和android或者ios进行结合开发,被称之为混合开发,原理就是在原生的开发语言中,提供了一个组件webview,这个组件就是原生语言的浏览器,但是得自行设置让其能够完美支持我们的应用,需要设置对应的标识,然后连接起来,称之为 JavascriptInterfac。
㈣ iOS WKWebView JS 与 原生交互小结
目前iOS项目中 Webview 几乎都会用到,iOS 8 之前使用UIWebView,iOS 8 之后 Apple 就不推荐使用了,目前已经放弃了,如果项目中存在就无法上架了,需要转为WKWebView了,说实话 UIWebView 是有性能上的缺陷,内存优化不够友好等,但是不得不说这是老的iOS开发人员用的最熟练熟悉的了,用起来得心应手。非迫不得已还真不愿转到WKWebView。好吧,既然已经这样了,又何必苦苦单恋一支花呢?
看了网上教程很多,自己使用小结一下,简单易用,本文适用于菜鸟级开发,废话不说了,
最主要的方法:发送消息
注意:对象名和方法名jumpUserProtocol名字的一致,参数可以是常用的NSArray,NSDictionary等类型,先说下在这个Demo中其实没用上,用的方法名判断的。
注意: addScriptMessageHandler
name为方法名 ,和JS 中的保持一致,添加脚本,相当于给Webview添加一个监听,有这个功能来处理JS。
在WKScriptMessageHandler代理方法中处理回调,实现自己的逻辑。
上面就是JS调用OC原生实现。
这个其实很简单,就一个方法: