精华内容
下载资源
问答
  • 下面小编就为大家带来一篇Js调用Java方法并互相传参的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 为了在 JavaScript 中访问原生类型或者引用 Java 类型,可以调用 Java.type() 函数,该函数根据传入的完整类名返回对应对象的类型。下面代码显示如何获取不同的对象类型: var ArrayList = Java.type("java.util....
  • springboot整合dwr实现js调用java方法,页面支持freemarker和jsp
  • 本文实例讲述了JavaScript调用客户端Java程序的方法。分享给大家供大家参考。具体如下: 一般说来,JavaScript是没有权限调用客户端可执行程序的。但有时有些特殊需要,又不得不调用。例如有时涉及客户端文件的操作...
  • javascript调用java方法

    万次阅读 2017-08-17 16:30:27
    本文中所有的代码使用 JavaScript 编写...在 JavaScript 中访问对象的属性和方法的语法与 Java 语言相同。 本文包含如下几部分: 1、访问 Java 类 为了在 JavaScript 中访问原生类型或者引用 Java 类型,可以

    本文中所有的代码使用 JavaScript 编写,但你也可以用其他兼容 JSR 223 的脚本语言。这些例子可作为脚本文件也可以在交互式 Shell 中一次运行一个语句的方式来运行。在 JavaScript 中访问对象的属性和方法的语法与 Java 语言相同。

    本文包含如下几部分:

    1、访问 Java 类

    为了在 JavaScript 中访问原生类型或者引用 Java 类型,可以调用 Java.type() 函数,该函数根据传入的完整类名返回对应对象的类型。下面代码显示如何获取不同的对象类型:

    ?
    1
    2
    3
    4
    var ArrayList = Java.type("java.util.ArrayList");
    var intType = Java.type("int");
    var StringArrayType = Java.type("java.lang.String[]");
    var int2DArrayType = Java.type("int[][]");

    在 JavaScript 中使用 Java.type() 函数返回的类型对象的方法跟在 Java 的类似。

    例如你可以使用如下方法来实例化一个类:

    ?
    1
    var anArrayList = new Java.type("java.util.ArrayList");

    Java 类型对象可用来实例化 Java 对象。下面的代码显示如何使用默认的构造函数实例化一个新对象以及调用包含参数的构造函数:

    ?
    1
    2
    3
    var ArrayList = Java.type("java.util.ArrayList");
    var defaultSizeArrayList = new ArrayList;
    var customSizeArrayList = new ArrayList(16);

    你可以使用 Java.type() 方法来获取对象类型,可以使用如下方法来访问静态属性以及方法:

    ?
    1
    2
    var File = Java.type("java.io.File");
    File.createTempFile("nashorn", ".tmp");

    如果要访问内部静态类,可以传递美元符号 $ 给 Java.type() 方法。

    下面代码显示如何返回 java.awt.geom.Arc2D 的 Float 内部类:

    ?
    1
    var Float = Java.type("java.awt.geom.Arc2D$Float");

    如果你已经有一个外部类类型对象,那么你可以像访问属性一样访问其内部类,如下所示:

    ?
    1
    2
    var Arc2D = Java.type("java.awt.geom.Arc2D")
    var Float = Arc2D.Float

    由于是非静态内部类,必须传递的是外部类实例作为参数给构造函数。

    虽然在 JavaScript 中使用类型对象跟在 Java 中类似,但其与 java.lang.Class 对象还是有些区别的,这个区别就是 getClass() 方法的返回值。你可以使用 class 和 static 属性来获取这个信息。

    下面代码显示二者的区别:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var ArrayList = Java.type("java.util.ArrayList");
    var a = new ArrayList;
     
    // All of the following are true:
    print("Type acts as target of instanceof: " + (a instanceof ArrayList));
    print("Class doesn't act as target of instanceof: " + !(a instanceof a.getClass()));
    print("Type is not the same as instance's getClass(): " + (a.getClass() !== ArrayList));
    print("Type's `class` property is the same as instance's getClass(): " + (a.getClass() === ArrayList.class));
    print("Type is the same as the `static` property of the instance's getClass(): " + (a.getClass().static === ArrayList));

    在语法和语义上,JavaScript 在编译时类表达式和运行时对象都和 Java 语义类似。不过在 Java 中 Class 对象是没有名为 static 这样的属性,因为编译时的类表达式不作为对象。

    2、导入 Java 包和类

    为了根据其简单的名称来访问 Java 类,我们可以使用 importPackage()  importClass() 函数来导入 Java 的包和类。这些函数存在于兼容性脚本文件 (mozilla_compat.js) 中。

    下面例子展示如何使用 importPackage()  importClass() 函数:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Load compatibility script
    load("nashorn:mozilla_compat.js");
    // Import the java.awt package
    importPackage(java.awt);
    // Import the java.awt.Frame class
    importClass(java.awt.Frame);
    // Create a new Frame object
    var frame = new java.awt.Frame("hello");
    // Call the setVisible() method
    frame.setVisible(true);
    // Access a JavaBean property
    print(frame.title);

    可以通过 Packages 全局变量来访问 Java 包,例如Packages.java.util.Vector 或者 Packages.javax.swing.JFrame。但标准的 Java SE 包有更简单的访问方式,如: java 对应 Packages.java, javax 对应 Packages.javax, 以及 org 对应 Packages.org。

    java.lang 包默认不需要导入,因为这会和 ObjectBooleanMath 等其他 JavaScript 内建的对象在命名上冲突。此外,导入任何 Java 包和类也可能导致 JavaScript 全局作用域下的变量名冲突。为了避免冲突,我们定义了一个 JavaImporter 对象,并通过 with 语句来限制导入的 Java 包和类的作用域,如下列代码所示:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Create a JavaImporter object with specified packages and classes to import
    var Gui = new JavaImporter(java.awt, javax.swing);
     
    // Pass the JavaImporter object to the "with" statement and access the classes
    // from the imported packages by their simple names within the statement's body
    with (Gui) {
     var awtframe = new Frame("AWT Frame");
     var jframe = new JFrame("Swing JFrame");
    };

    3、使用 Java 数组

    为了创建 Java 数组对象,首先需要获取 Java 数组类型对象并进行初始化。JavaScript 访问数组元素的语法以及 length 属性都跟 Java 一样,如下列代码所示:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var StringArray = Java.type("java.lang.String[]");
    var a = new StringArray(5);
     
    // Set the value of the first element
    a[0] = "Scripting is great!";
    // Print the length of the array
    print(a.length);
    // Print the value of the first element
    print(a[0]);

    给定一个 JavaScript 数组 我们还可以用 Java.to() 方法将它转成 Java 数组。我们需要将 JavaScript 数组作为参数传给该方法,并指定要返回的数组类型,可以是一个字符串,或者是类型对象。我们也可以忽略类型对象参数来返回 Object[] 数组。转换操作是根据 ECMAScript 转换规则进行的。下面代码展示如何通过不同的 Java.to() 的参数将 JavaScript 数组变成 Java 数组:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // 创建一个 JavaScript 数组
    var anArray = [1, "13", false];
     
    // 将数组转换成 java 的 int[] 数组
    var javaIntArray = Java.to(anArray, "int[]");
    print(javaIntArray[0]); // prints the number 1
    print(javaIntArray[1]); // prints the number 13
    print(javaIntArray[2]); // prints the number 0
     
    // 将 JavaScript 数组转换成 Java 的 String[] 数组
    var javaStringArray = Java.to(anArray, Java.type("java.lang.String[]"));
    print(javaStringArray[0]); // prints the string "1"
    print(javaStringArray[1]); // prints the string "13"
    print(javaStringArray[2]); // prints the string "false"
     
    // 将 JavaScript 数组转换成 Java 的 Object[] 数组
    var javaObjectArray = Java.to(anArray);
    print(javaObjectArray[0]); // prints the number 1
    print(javaObjectArray[1]); // prints the string "13"
    print(javaObjectArray[2]); // prints the boolean value "false"

    你可以使用 Java.from() 方法来将一个 Java 数组转成 JavaScript 数组。

    下面代码演示如何将一个包含当前目录下文件列表的数组转成 JavaScript 数组:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    // Get the Java File type object
    var File = Java.type("java.io.File");
    // Create a Java array of File objects
    var listCurDir = new File(".").listFiles();
    // Convert the Java array to a JavaScript array
    var jsList = Java.from(listCurDir);
    // Print the JavaScript array
    print(jsList);

    注意:

    大多数情况下,你可以在脚本中使用 Java 对象而无需转换成 JavaScript 对象。

    4、实现 Java 接口

    在 JavaScript 实现 Java 接口的语法与在 Java 总定义匿名类的方法类似。我们只需要实例化接口并用 JavaScript 函数实现其方法即可。

    下面代码演示如何实现 Runnable 接口:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // Create an object that implements the Runnable interface by implementing
    // the run() method as a JavaScript function
    var r = new java.lang.Runnable() {
     run: function() {
      print("running...\n");
     }
    };
     
    // The r variable can be passed to Java methods that expect an object implementing
    // the java.lang.Runnable interface
    var th = new java.lang.Thread(r);
    th.start();
    th.join();

    如果一个方法希望一个对象,这个对象实现了只有一个方法的接口,你可以传递一个脚本函数给这个方法,而不是传递对象。例如,在上面的例子中 Thread() 构造函数要求一个实现了 Runnable 接口的对象作为参数。我们可以利用自动转换的优势传递一个脚本函数给 Thread() 构造器。

    下面的例子展示如何创建一个 Thread 对象而无需实现 Runnable 接口:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Define a JavaScript function
    function func() {
     print("I am func!");
    };
     
    // Pass the JavaScript function instead of an object that implements
    // the java.lang.Runnable interface
    var th = new java.lang.Thread(func);
    th.start();
    th.join();

    你可以通过传递相关类型对象给 Java.extend() 函数来实现多个接口。

    5、扩展抽象 Java 类

    你可以实例化一个匿名的抽象类的子类,只需要给构造函数传递一个 JavaScript 对象,对象中包含了一些属性对应了抽象类方法实现的值。如果一个方法是重载的,JavaScript 函数将会提供所有方法变种的实现。下面例子显示如何初始化抽象类 TimerTask 的子类:

    ?
    1
    2
    var TimerTask = Java.type("java.util.TimerTask");
    var task = new TimerTask({ run: function() { print("Hello World!") } });

    除了调用构造函数并传递参数,我们还可以在 new 表达式后面直接提供参数。

    下面的例子显示该语法的使用方法(类似 Java 匿名内部类的定义),这比上面的例子要简单一些:

    ?
    1
    2
    3
    4
    5
    var task = new TimerTask {
     run: function() {
      print("Hello World!")
     }
    };

    如果抽象类包含单个抽象方法(SAM 类型),那么我们就无需传递 JavaScript 对象给构造函数,我们可以传递一个实现了该方法的函数接口。下面的例子显示如何使用 SAM 类型来简化代码:

    ?
    1
    var task = new TimerTask(function() { print("Hello World!") });

    不管你选择哪种语法,如果你需要调用一个包含参数的构造函数,你可以在实现对象和函数中指定参数。

    如果你想要调用一个要求 SAM 类型参数的 Java 方法,你可以传递一个 JavaScript 函数给该方法。Nashorn 将根据方法需要来实例化一个子类并使用这个函数去实现唯一的抽象方法。

    下面的代码显示如何调用 Timer.schedule() 方法,该方法要求一个 TimerTask 对象作为参数:

    ?
    1
    2
    var Timer = Java.type("java.util.Timer");
    Timer.schedule(function() { print("Hello World!") });

    注意:

    前面的语法假设所要求的 SAM 类型是一个接口或者包含一个默认构造函数,Nashorn 用它来初始化一个子类。这里是无法使用不包含默认构造函数的类的。

    6、扩展具体 Java 类

    为了避免混淆,扩展抽象类的语法不能用于扩展具体类。因为一个具体类是可以被实例化的,这样的语法会被解析成试图创建一个新的类实例并传递构造函数所需类的对象(如果预期的对象类型是一个接口)。为了演示这个问题,请看看下面的示例代码:

    ?
    1
    var t = new java.lang.Thread({ run: function() { print("Thread running!") } });

    这行代码被解析为扩展了 Thread 类并实现了 run() 方法,而 Thread 类的实例化是通过传递给其构造函数一个实现了 Runnable 接口的对象。

    为了扩展一个具体类,传递其类型对象给 Java.extend() 函数,然后返回其子类的类型对象。紧接着就可以使用这个子类的类型对象来创建实例并提供额外的方法实现。

    下面的代码将向你展示如何扩展 Thread 类并实现 run() 方法:

    ?
    1
    2
    3
    4
    var Thread = Java.type("java.lang.Thread");
    var threadExtender = Java.extend(Thread);
    var t = new threadExtender() {
     run: function() { print("Thread running!") }};

    Java.extend() 函数可以获取多个类型对象的列表。你可以指定不超过一个 Java 的类型对象,也可以指定跟 Java接口一样多的类型对象数量。返回的类型对象扩展了指定的类(或者是 java.lang.Object ,如果没有指定类型对象的话),这个类实现了所有的接口。类的类型对象无需在列表中排在首位。

    7、访问超类(父类)的方法

    想要访问父类的方法可以使用 Java .super() 函数。

    下面的例子中显示如何扩展 java.lang.Exception 类,并访问父类的方法。

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Example 3-1 访问父类的方法 (super.js)
     
    var Exception = Java.type("java.lang.Exception");
    var ExceptionAdapter = Java.extend(Exception);
     
    var exception = new ExceptionAdapter("My Exception Message") {
     getMessage: function() {
      var _super_ = Java.super(exception);
      return _super_.getMessage().toUpperCase();
     }
    }
     
    try {
     throw exception;
    } catch (ex) {
     print(exception);
    }

    如果你运行上面代码将会打印如下内容:

    ?
    1
    jdk.nashorn.javaadapters.java.lang.Exception: MY EXCEPTION MESSAGE

    8、绑定实现到类

    前面的部分我们描述了如何扩展 Java 类以及使用一个额外的 JavaScript 对象参数来实现接口。实现是绑定的具体某个实例上的,这个实例是通过 new 来创建的,而不是整个类。这样做有一些好处,例如运行时的内存占用,因为 Nashorn 可以为每个实现的类型组合创建一个单一的通用适配器。

    下面的例子展示不同的实例可以是同一个 Java 类,而其 JavaScript 实现对象却是不同的:

    ?
    1
    2
    3
    4
    5
    6
    var Runnable = java.lang.Runnable;
    var r1 = new Runnable(function() { print("I'm runnable 1!") });
    var r2 = new Runnable(function() { print("I'm runnable 2!") });
    r1.run();
    r2.run();
    print("We share the same class: " + (r1.class === r2.class));

    上述代码将打印如下结果:

    ?
    1
    2
    3
    I'm runnable 1!
    I'm runnable 2!
    We share the same class: true

    如果你想传递类的实例给外部 API(如 JavaFX 框架,传递 Application 实例给 JavaFX API),你必须扩展一个 Java 类或者实现了与该类绑定的接口,而不是它的实例。你可以通过传递一个 JavaScript 对象绑定实现类并传递给 Java.extend() 函数的最后一个参数。这个会创建一个跟原有类包含一样构造函数的新类,因为它们不需要额外实现对象参数。

    下面的例子展示如何绑定实现到类中,并演示在这种情况下对于不同调用的实现类是不同的:

    ?
    1
    2
    3
    4
    5
    6
    var RunnableImpl1 = Java.extend(java.lang.Runnable, function() { print("I'm runnable 1!") });
    var RunnableImpl2 = Java.extend(java.lang.Runnable, function() { print("I'm runnable 2!") });
    var r1 = new RunnableImpl1();var r2 = new RunnableImpl2();
    r1.run();
    r2.run();
    print("We share the same class: " + (r1.class === r2.class));

    上面例子执行结果如下:

    ?
    1
    2
    3
    I'm runnable 1!
    I'm runnable 2!
    We share the same class: false

    将实现对象从构造函数调用移到 Java.extend() 函数调用可以避免在构造函数调用中所需的额外参数。每一个 Java.extend() 函数的调用都需要一个指定类的实现对象生成一个新的 Java 适配器类。带类边界实现的适配器类仍可以使用一个额外的构造参数用来进一步重写特定实例的行为。因此你可以合并这两种方法:你可以在一个基础类中提供部分 JavaScript 实现,然后传递给 Java.extend() 函数,以及在对象中提供实例实现并传递给构造函数。对象定义的函数并传递给构造函数时将覆盖对象的一些函数定义。

    下面的代码演示如何通过给构造函数传递一个函数来覆盖类边界对象的函数:

    ?
    1
    2
    3
    4
    5
    6
    var RunnableImpl = Java.extend(java.lang.Runnable, function() { print("I'm runnable 1!") });
    var r1 = new RunnableImpl();
    var r2 = new RunnableImpl(function() { print("I'm runnable 2!") });
    r1.run();
    r2.run();
    print("We share the same class: " + (r1.class === r2.class));

    上面例子执行后打印结果如下:

    ?
    1
    2
    3
    I'm runnable 1!
    I'm runnable 2!
    We share the same class: true

    9、选择方法重载变体

    Java 的方法可以通过使用不同的参数类型进行重载。Java 编译器 (javac) 会在编译时选择正确的方法来执行。在 Nashorn 中对Java 重载方法的解析实在方法被调用的时候执行的。也是根据参数类型来确定正确的方法。但如果实际的参数类型会导致模棱两可的情况下,我们可以显式的指定具体某个重载变体。这会提升程序执行的性能,因为 Nashorn 引擎无需在调用过程中去辨别该调用哪个方法。

    重载的变种作为特别的属性暴露出来。我们可以用字符串的形式来引用它们,字符串包含方法名称、参数类型,两者使用圆括号包围起来。

    下面的例子显示如何调用  System.out.println() 方法带 Object 参数的变种,我们传递一个 “hello” 字符串给它:

    ?
    1
    2
    var out = java.lang.System.out;
    out["println(Object)"]("hello");

    上述的例子中,光使用 Object 类名就足够了,因为它是唯一标识正确的签名。你必须使用完整的类名的情况是两个重载变种函数使用不同的参数类型,但是类型的名称相同(这是可能的,例如不同包中包含相同的类名)。

    10、映射数据类型

    绝大多数 Java 和 JavaScript 之前的转换如你所期待的运行良好。前面的章节中我们提到过一些简单的 Java 和 JavaScript 之间的数据类型映射。例如可以显式地转换数组类型数据,JavaScript 函数可以在当成参数传递给 Java 方法时自动转换成 SAM 类型。每个 JavaScript 对象实现了 java.util.Map 接口来让 API 可以直接接受映射。当传递数值给 Java API 时,会被转成所期待的目标数值类型,可以是封装类型或者是原始数据类型。如果目标类型不太确定(如 Number),你只能要求它必须是 Number 类型,然后专门针对该类型是封装了 Double、Integer 或者是 Long 等等。内部的优化使得数值可以是任何封装类型。同事你可以传递任意 JavaScript 值给 Java API,不管是封装类型还是原始类型,因为 JavaScript 的 ToNumber 转换算法将会自动处理其值。如果 Java 方法要求一个 String 或者 Boolean 对象参数,JavaScript 将会使用 ToString 和 ToBoolean 转换来获得其值。

    注意:

    因为对字符串操作的内部性能优化考虑,JavaScript 字符串并不总是对应 java.lang.String 类型,也可能是 java.lang.CharSequence 类型。如果你传递一个 JavaScript 字符串给要求 java.lang.String 参数的 Java 方法,那么这个 JavaScript 字符串就是 java.lang.String 类型,但如果你的方法签名想要更加泛型化(例如接受的参数类型是 java.lang.Object),那么你得到的参数对象就会使一个实现了 CharSequence 类的对象,而不是一个 Java 字符串对象。

    转载内容详情点击打开链接

    展开全文
  • js调用java类的方法

    2015-03-15 08:55:55
    js 直接调用java类的方法,自己根据.net有过类似的方法想这样做,简单实现。包括源代码
  • 主要介绍了kettle中使用js调用java类的方法,本文讲解了注意事项和调用语法,需要的朋友可以参考下
  • 方法名(参数)}”这种格式来调用Java类的静态方法。 开发环境:IntelliJ IDEA 2019.2.2 Spring Boot版本:2.1.8 新建一个名称为demo的Spring Boot项目。 1、pom.xml 加入Thymeleaf依赖 <groupId>org.spring...
  • Js通过PhoneGap调用Java方法并互相传参的。 一、JAVA代码 写一个类,该类继承自Plugin并重写execute方法。 import org.json.JSONArray; import android.app.Activity; import android.app.AlertDialog; ...

    Js通过PhoneGap调用Java方法并互相传参的。

    一、JAVA代码

    写一个类,该类继承自Plugin并重写execute方法。

    import org.json.JSONArray;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.ActivityNotFoundException;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import com.phonegap.api.PhonegapActivity;
    import com.phonegap.api.Plugin;
    import com.phonegap.api.PluginResult;
    
    public class PluginTest extends Plugin {

       public static String ACTION = "hello";
    public PluginTest() { } /** * Executes the request and returns PluginResult. * * @param action The action to execute. * @param args JSONArray of arguments for the plugin. * @param callbackId The callback id used when calling back into JavaScript. * @return A PluginResult object with a status and message. */ @Override public PluginResult execute(String action, JSONArray args, String callbackId) { try { JSONObject jsonObj = new JSONObject();//可以返回给JS的JSON数据 if (action.equals("hello")) { String str1= args.getString(0); //获取第一个参数 String str2= args.getString(1); //获取第二个参数 jsonObj.put("str1", str1+"1"); //把参数放到JSONObject对象中 jsonObj.put("str2", str2+"2");  //把参数放到JSONObject对象中 } PluginResult r = new PluginResult(PluginResult.Status.OK,jsonObj); return r; } catch (Exception e) { e.printStackTrace(); } } }

     

    二、在plugins.xml中配置插件

    在plugins.xml文件中添加对新插件的配置信息

    <?xml version="1.0" encoding="utf-8"?>
    <plugins>
        <plugin name="App" value="com.phonegap.App"/>
        <plugin name="Geolocation" value="com.phonegap.GeoBroker"/>
        <plugin name="Device" value="com.phonegap.Device"/>
        <plugin name="Accelerometer" value="com.phonegap.AccelListener"/>
        <plugin name="Compass" value="com.phonegap.CompassListener"/>
        <plugin name="Media" value="com.phonegap.AudioHandler"/>
        <plugin name="Camera" value="com.phonegap.CameraLauncher"/>
        <plugin name="Contacts" value="com.phonegap.ContactManager"/>
        <plugin name="Crypto" value="com.phonegap.CryptoHandler"/>
        <plugin name="File" value="com.phonegap.FileUtils"/>
        <plugin name="Network Status" value="com.phonegap.NetworkManager"/>
        <plugin name="Notification" value="com.phonegap.Notification"/>
        <plugin name="Storage" value="com.phonegap.Storage"/>
        <plugin name="Temperature" value="com.phonegap.TempListener"/>
        <plugin name="FileTransfer" value="com.phonegap.FileTransfer"/>
        <plugin name="Capture" value="com.phonegap.Capture"/>
        <!-- 新增的插件类配置 name 写你的类名,value写 包名.类名-->
        <plugin name="PluginTest" value="com.easyway.barcode.PluginTest "/>  
    </plugins>

     

    三、Javascript文件中注册插件

    新建一个.js文件,并把该文件和phonegap文件放在同一目录。(新建一个simplePlugin.js文件)

    var SimplePlugin = function() {};
    
    //str1和str2是传到JAVA的参数 SimplePlugin.prototype.hello
    = function(successCallback, failureCallback, str1, str2) { // exec 內的參數分別是: Success Callback, Failure Callback, Registered Plugin name:就是在XML文件配置的那个所对应的name, // 'hello'是传入Java文件的execute方法中的参数String action // name (從 HTML 傳進來的參數) return PhoneGap.exec(successCallback, failureCallback, 'PluginTest', 'hello', [str1,str2]); }; // 这里是 PhoneGap Plugin 的註冊,Plugin 的名稱還有 Native Class 的名稱別打錯了,就是我們剛剛輸入的那些 PhoneGap.addConstructor(function() { // Register the javascript plugin with PhoneGap PhoneGap.addPlugin('simpleplugin', new SimplePlugin()); //simpleplugin是插件名称, new SimplePlugin()实例化的是本Javascript的类名 });

     

    四、在HTML文件中调用方法

    在html文件中引入phonegap和插件的js文件,调用方法

    <!DOCTYPE html>
    <html>
        <head>
        <meta charset="utf-8">
        <title>JAVA传参</title>
        <script src="phonegap.js"></script> <!--phonegap包-->
        <script src="js/jquery.js"></script>
        <script src="simplePlugin.js"></script><!--自定义的插件文件-->
        <script>    
        $(document).ready(function(e) {
            $("#btn_test").click(function(){
                window.plugins.simplePlugin.hello( 
                    function(result) {
                        alert("返回的第一个参数:"+result.str1+"返回的第二个参数"+result.str2);
                    }, 
                    function(error) {
                    },
                    "第一个参数",
                    "第二个参数"
                );    
            });
        });
        </script>
        </head>
    <body>
    <button type="button"  id="btn_test">Click Me!</button>
    </body>
    </html>

     

    转载于:https://www.cnblogs.com/liluping860122/p/3937724.html

    展开全文
  • js调用java方法并取回返回值

    万次阅读 2017-09-09 17:08:34
    我在写项目的时候需要js和java在WebView进行交互,并且需要js调用java方法并返回参数给js,找了几个文档感觉写的不怎么详细,我就想了个办法试了试成功之后我就将细节写成文档记录一下,方便日后查看,也请各位大佬...

    我在写项目的时候需要js和java在WebView进行交互,并且需要js调用java方法并返回参数给js,找了几个文档感觉写的不怎么详细,我就想了个办法试了试成功之后我就将细节写成文档记录一下,方便日后查看,也请各位大佬指出一些问题!

    WebView部分

     

    webView.addJavascriptInterface(new JsInterface(this), "AndroidWebView"); //重要的

     

     

     

     

     

     

    Java部分

     

     @SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"}) 
    class JsInterface {
        private Context mContext;
    
        public JsInterface(Context context) {
            this.mContext = context;
        }
    
    
         @JavascriptInterface
         public String getName(){
             return getUser();
         }
    
         @JavascriptInterface
         public String getPass(){
             return getPass();
         }
    }
    

     

     

     

    Js部分

     

    function loading(){
    	var name=window.AndroidWebView.getName()
    	var pass=window.AndroidWebView.getPass()//调用java方法
    		$.post("101.111.11:800",{remark:name,password:pass},function(result){
    	    	var obj=result;
    	    	if(obj.code==100){
    	    		toast("登录成功");
    	    	}else{
    	    		toast("登录失败");
    	    	}
    	    });
    		}

     

     

     

     

     

     

    展开全文
  • DWR实现java类转换成JavaScript类的小例子。
  • webview中js调用java方法

    千次阅读 2017-04-06 14:17:15
    开始我想着是监听网页中的点击事件,但最后还是选择了 当点击了网页中的按钮后,让js(网页)调用我们的java方法。下面附上webview中的使用代码/*在js注册点击监听回调 */ webview.addJavascriptInterface...

    前几天接到这样一个需求,在android webview中显示网页的内容,但是网页中有一按钮,点击后需要我们app中去处理。开始我想着是监听网页中的点击事件,但最后还是选择了 当点击了网页中的按钮后,让js(网页)调用我们的java方法。下面附上webview中的使用代码

    /*在js注册点击监听回调
    */
    webview.addJavascriptInterface(MainActivity.this,"android");
    //需要js调用的函数
    //由于安全原因 需要加 @JavascriptInterface
            @JavascriptInterface
            public void shareActive(String json) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        showprogress();
                    }
                });
        }

    初步解释一下上面两个函数意义
    addJavascriptInterface就是在js注册点击监听回调。两个参数分别是上下本对象,另一个
    “android”是我们自定义的一个对象名称。在js中使用 window.android.shareActive(“我是帅聪”),即可完成js调用java的方法。

    1. shareActive(String data),是目标函数,即js要调用的函数
      java调用js并传参数
      //调用js中的函数:showInfoFromJava(state )
      int state=1;
      web_detail.loadUrl(“javascript:showInfoFromJava(‘” + state + “’)”);
      其中state是我们需要传过去的值,同时也是js中取值的关键字
    展开全文
  • java 调用webview js方法, webview js调用java方法首先加载一个本地的web页面,html代码如下 ;charset=gb2312"> <script type="text/javascript">function javacalljs(){
  • 主要介绍了android webview中使用Java调用JavaScript方法并获取返回值,本文直接给出代码示例,需要的朋友可以参考下
  • 如今越来越多的webapp使用必然牵扯到网页调用android方法,所以我总结下 环境adt我们建一个工程,设置sdk1:在project.properties文件下设置target=android-14 2:修改minifest文件 android:minSdkVersion="8" ...
  • android + h5 混合开发 webview 版 小实例 + 数据交互 + 界面交互+ js调用java +java 调用js
  • 主要介绍了JavaScript中如何调用Java方法,帮助大家更好的理解和使用JavaScript,感兴趣的朋友可以了解下
  • DWR中js调用Java方法的参数及返回值

    千次阅读 2015-07-09 14:38:45
    1、调用没有返回值和参数的Java方法 1.1、dwr.xml的配置  标签中包括可以暴露给 javascript 访问的东西。  标签中指定 javascript 中可以访问的 java 类,并定义 DWR 应当如何...
  • //需要加入th:inline=“javascript
  • java调用js package com.cjh.js.test; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import javax.script.Invocable; import javax....
  • SWT内嵌浏览器中JS调用JAVA方法

    千次阅读 2018-01-14 19:48:17
    new BrowserFunction(browser, "myCallJava"){ @Override public Object function(Object[] arguments) { System.out.println(arguments[0]); return super.function(arguments);...
  • 说不清,直接贴代码: 首先是网页: js和android相互调用 ... //调用java方法jsCallJava() function showHtmlcallJava() { var str = window.android.jsCallJava();... document.getElementById... //调用java方法
  • 本示例 将英文词典整合到Web 页中(JavaScript 调用 Java 方法),要实现效果,必须先启动ch06_dictionary_contentprovider 工程
  • Android中JSJava相互调用Demo

    热门讨论 2013-05-17 23:50:01
    Android中JSJava相互调用的Demo
  • js 调用java webservice接口

    热门讨论 2014-03-21 17:21:02
    js调用webservice接口,并打印返回信息
  • 为了方便网页和Android应用的交互,Android系统提供了WebView中JavaScript网页脚本调用Java方法的机制。只要调用addJavascriptInterface方法即可映射一个Java对象到JavaScript对象上。 1、映射Java对象到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 330,923
精华内容 132,369
关键字:

js调用java方法

java 订阅