Java作为一门强类型语言,在与JavaScript的交互中需要先将Java对象转换为JavaScript对象,而JavaScript作为一门弱类型语言则能较为方便地与Java进行交互。以下是Java和JavaScript之间的一些交互方式:
// Java中通过JSObject调用JavaScript全局属性和方法 import netscape.javascript.JSObject; public class TestJSObject { public static void main(String[] args) { String url = "http://www.baidu.com"; JSObject win = JSObject.getWindow(null); win.eval("window.location.href='" + url + "'"); } }
通过JSObject可以在Java中调用JavaScript的全局属性和方法。
// 将Java对象转换为JavaScript对象 public class Person { private String name; public Person(String name) { this.name = name; } public String getName() { return name; } } public static void main(String[] args) { Person person = new Person("张三"); JSObject win = JSObject.getWindow(null); win.setMember("person", person); String evalStr = "alert(person.getName())"; win.eval(evalStr); }
使用JSObject可以将Java对象转换为JavaScript对象,并在JavaScript中直接使用。
// 通过Applet和Java插件与JavaScript进行交互 public class MyJavaApplet extends Applet { ... public void toJavaScript(String str) { JSObject jsObj = JSObject.getWindow(this); jsObj.eval("alert('" + str + "');"); } ... } // HTML代码:// JavaScript代码: var applet = document.myapplet; applet.toJavaScript("Hello,world!");
使用Applet和Java插件可以在浏览器中使用Java和JavaScript相互调用。
// 使用Java调用JavaScript中的函数 public static void main(String[] args) throws ScriptException { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); String script = "function add(a,b){return a+b;}"; engine.eval(script); Invocable invocable = (Invocable) engine; Double result = (Double) invocable.invokeFunction("add", 1, 2); System.out.println(result); }
通过ScriptEngine可以在Java中调用JavaScript中的函数。
以上是Java和JavaScript之间的一些交互方式,可以根据具体需求选择适合的方式进行交互。