JS 调用android的方法该怎么调

JavaScript07

JS 调用android的方法该怎么调,第1张

用webview打开网页,然后通过webview与app的本地java代码进行交互。

1、设置webview支持Javascript

mWebview.getSettings().setJavaScriptEnabled(true)

2、加进一个回调的代理类JavaScriptInterface,并给它一个调用的名称:ncp

mWebView.addJavascriptInterface(new JavaScriptInterface(), "ncp")

final class JavaScriptInterface {

public int callOnJs() {

return 1000

}

public void callOnJs2(String mode) {

//TODO

}

}

3、JS页面调用android方法

<script type="text/javascript">

window.onload = function(){

var _int_value = window.ncp.callOnJs() //通过ncp代理调用android方法

}

</script>

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需要做的事情。