前置条件:
模拟器(运行app)
服务器(运行webView里面要显示的页面)
服务器可以用tomcat,也可用ngnix,这里以ngnix为例。
1、ngnix启动后,会开放本机的80端口
2、模拟器不能用localhost访问本机端口,因为那样访问的是模拟器本机的端口。通过模拟器访问本机端口的方式参看模拟器访问本地电脑的端口
做个demo演示如何在webView中调用html中的js的方法
aaa.html:
......重复代码省略<body><a onclick = \"test()\">aaaa</a><script type = \"text/javascript\">function test(){alert(“弹个窗”);}</script></body>......
将这个文件放进ngnix的html文件夹下(tomcat服务器的话,就放进wabapps目录下的ROOT),然后启动服务器
这样我们的前端页面就准备好了,现在只需要让app去访问这个页面了。
创建一个简单的android项目
新建一个HActivity.java界面作为app的主界面,并去AndroidManifest.xml中声明一下,顺便加上权限:
<user-permission android:name=\"android.permission.INTERNET\">
这个很重要,不然会报错,报错解决方案看这里安卓webView报ERR_CACHE_MISS错误和ERR_CONNECTION_REFUSED错误及解决
下面是HActivity.java的代码:
......public class HActivity extends Activity{WebView w;protected void onCreate(Bundle b){super.onCreate(b);setContentView(R.layout.activity_h);initRes();}private void initRes(){w = findViewById(R.id.wv);TextView t = findViewById(R.id.tv);//启用jsw.getSttings().setJavaScriptEnabled(true);//启用domw.getSttings().setDomStrorageEnabled(true);//允许弹窗w.getSttings().setJacaScriptCanOpenWindowsAutomativally(true);//加载前端的网址w.loadUrl(\"http://10.0.2.2:80/aaa.html\");w.setWebChromeClient(new WebChromeClient());t.setOnclickListener(new View.OnClickListener(){public void onClick(View v){//调用js方法w.loadUrl(\"javascript:test()\");}});}}
可以看到调用js方法还是用的
loadUrl
这个方法,只不过里面的参数是一个固定的格式,也就是
javascript冒号+方法名
HActivity.java 的布局文件activity_h.xml:
其实就是简单的放进去一个webview控件和一个textView控件前者的id叫做\"wv\",后者的id叫做\"tv\",文本是\"点我\".
这时候启动项目,发现我们前端界面显示在屏幕了,然后我们点击前端界面上的aaa能弹出弹窗,但这个是前端界面自己调用的js,不是我们需要的.
我们在java代码中,为一个textView控件设置了监听,点击这个tv会调用js中的test方法,所以我们点一下我们的\”点我\”,这时发现也弹窗了,和前端调用一个效果,至此我们的demo完成了.