要实现交互,就是让程序调用网页的function,让网页调用程序的方法。
Java调用JS:
- 在程序中
无参数
webView.loadUrl(“javascript:methodName()”)
有参数
webView.loadUrl("javascript:methodName("+conent+")")
- 在网页中
<script type="text/javascript">
function methodName() { //此处为无参的执行方法
}
function methodName(content) { //此处为有参的执行方法
}
</script>
需要注意:
1.需要设置webSettings.setJavaScriptEnabled(true);
2.
webView.loadUrl(“javascript:methodName(parameterValues)”)
是不可以在 页面加载时执行。想要加载时执行可以
mWebView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mWebView.loadUrl("javascript:methodName()");//
}
});//在网页加载结束后执行
js调用java
- 在程序中
mWebView.addJavascriptInterface(new className(), "jsInterfaceName");
- 在网页中
<script type="text/javascript">
window.jsInterfaceName.methodName()`//methodName为class的方法
window.jsInterfaceName.methodName(content)//调用一个有参的方法
</script>
一个网页动态适配屏幕的例子:
demo.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
function sayHello(str1,str2){
document.getElementById("t").style.width = str1+"px";
document.getElementById("t").style.height = str2+"px";
}
</script>
</head>
<body style="padding: 0;margin: 0;">
<div id="t" style="background-color: red;height: 400px; width: 300px;">
<div id='b'><a onclick="window.demo.clickOnAndroid()">点击调用java</a></div>
</div>
</body>
</html>
MainActivity主要方法
public class MainActivity extends Activity {
WebView mWebView;
int i,j;
int flag=0;
Handler mHandler=new Handler();
Button btn;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webview);
j=getWindowManager().getDefaultDisplay().getHeight()/2;
i=getWindowManager().getDefaultDisplay().getWidth()/2;
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
mWebView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mWebView.loadUrl("javascript:sayHello("+i+","+j+")");
}
});
mWebView.loadUrl("file:///android_asset/demo.html");
}
final class DemoJavaScriptInterface {
DemoJavaScriptInterface() {
}
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
Toast.makeText(MainActivity.this, "java调用", Toast.LENGTH_LONG).show();
}
});
}
}
}