js怎么跟Android和ios进行交互呢?

JavaScript011

js怎么跟Android和ios进行交互呢?,第1张

Android和ios都是用navtive语言编写的app,那么调用js的方法如下:

Native 调用 JS:

本质就一个方法,通过 stringByEvaluatingJavaScriptFromString,都是同步。

1.通常方法:js修通过改doucument的loaction或者新建一个看不见的iFrame,修改它的 src,就会触发回调 webView 的 shouldStartLoadWithRequest,参数 request 的 url 就是新赋值的 location 或者 url,上层截获这个 url 的参数,对此分发即可。 这个都是异步调用的。

如 JS function:

var messagingIframe

messagingIframe = document.createElement('iframe')

messagingIframe.style.display = 'none'

document.documentElement.appendChild(messagingIframe)

function TestIOSJS(){

messagingIframe.src = "ios/test/click"

}

当触发上面的JS时,webview会收到下面的回调:

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

{

NSString *url = request.URL.absoluteString

if([url hasSuffix:@"ios/test/click"]){

//do something you want

return NO

}

return YES

}

通过截获这个request的参数就可以做native需要做的事情。

具体原因是这样的:

1、Java调用js里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法。

2、Java调用js的函数、没有返回值、调用了就控制不到了。

3、Js调用Java的方法、返回值如果是字符串、你会发现这个字符串是native的、转成locale的才能正常使用、使用toLocaleString()函数就可以了、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间。

4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验。