十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Android中java与js交互是通过webView来交互的。
成都创新互联公司专业为企业提供营山网站建设、营山做网站、营山网站设计、营山网站制作等企业网站建设、网页设计与制作、营山企业网站模板建站服务,10余年营山做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法:
第一种方法的步骤:
1.在要Activity中实例化WebView组件:WebView webView = new WebView(this);
2.调用WebView的loadUrl()方法,设置WevView要显示的网页:
互联网用:webView.loadUrl("");
本地文件用:webView.loadUrl(""); 本地文件存放在:assets 文件中
3.调用Activity的setContentView( )方法来显示网页视图
4.用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
5.需要在AndroidManifest.xml文件中添加权限,否则会出现Web page not available错误。
uses-permission android:name="android.permission.INTERNET" /
第二种方法的步骤:
1、在布局文件中声明WebView
2、在Activity中实例化WebView
3、调用WebView的loadUrl( )方法,设置WevView要显示的网页
4、为了让WebView能够响应超链接功能,调用setWebViewClient( )方法,设置 WebView视图
5、用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
6、需要在AndroidManifest.xml文件中添加权限,否则出现Web page not available错误。
uses-permission android:name="android.permission.INTERNET"/
在Java中调用js文件中的function,传入调用参数,并获取返回值
js文件中的merge函数将两个参数a,b相加,并返回c。
// expression.js
function merge(a, b) {
c = a * b;
return c;
}
在Java代码中读取js文件,并参数两个参数,然后回去返回值。
package com.sinaapp.manjushri;
import java.io.FileReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
/** * Java调用并执行js文件,传递参数,并活动返回值 * * @author manjushri */
public class ScriptEngineTest {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
String jsFileName = "expression.js"; // 读取js文件
FileReader reader = new FileReader(jsFileName); // 执行指定脚本
engine.eval(reader);
if(engine instanceof Invocable) {
Invocable invoke = (Invocable)engine; // 调用merge方法,并传入两个参数
// c = merge(2, 3);
Double c = (Double)invoke.invokeFunction("merge", 2, 3);
System.out.println("c = " + c);
}
reader.close();
}
}
输出结果:
c = 5.0
要在java中执行js代码,首先明白,java不支持浏览器本身的方法。支持自定义的js方法,否则会报错
先新建一个js文件:jsss.js
内容如下:
function aa(a,b){ return a+b;
}
然后在java中写代码:
public class ZipTest {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
String jsFileName="G:\\javaPro\\zmwmcc\\WebRoot\\jsss.js";
FileReader reader = new FileReader(jsFileName); // 执行指定脚本 engine.eval(reader);
if(engine instanceof Invocable) {
Invocable invoke = (Invocable)engine; // 调用merge方法,并传入两个参数
Double c = (Double)invoke.invokeFunction("aa", 2, 3); //调用了js的aa方法
System.out.println(c);
}
// engine.eval("alert(\"js alert\");"); // 不能调用浏览器中定义的js函数 // 错误,会抛出alert引用不 }
}