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