public class

JsValue

extends Object
java.lang.Object
   ↳ com.tencent.smtt.sdk.JsValue

Class Overview

每个 JsValue 实例是对一个 JavaScript 值的引用,用于对 JavaScript 引擎返回的不特定数据类型的判断以及与 Java 数据类型的转换。

Summary

Protected Constructors
JsValue(JsContext context, IX5JsValue value)
Public Methods
JsValue call(Object... args)
如果是 JavaScript 函数,则将输入参数一一转为对应类型的 JavaScript 数据,并调用该 JavaScript 函数;否则,直接返回 null。 可用于 JavaScript 调用 Java 函数的回调函数。如申明了 JavascriptInterface 接口:
 
 
public class AsyncTaskSample {
     
private JsValue callback;
 
   
@JavascriptInterface
     
public void doTask(String data, JsValue callback) {
         mCallback
= callback;
     
}
 
     
private void onCompleted() {
         
if (mCallback != null && mCallback.isFunction()) {
             
String s = mCallback.call("321");
         
}
     
}
 
}
 

 
则可在 JavaScript 中调用:
 
 sample
.doTask("123", function(result) { console.log(result); });
 

 
JsValue construct(Object... args)
如果是 JavaScript 函数,则将输入参数一一转为对应类型的 JavaScript 数据,并作为 构造函数 调用该 JavaScript 函数;否则,直接返回 null。 用法与 call(Object...) 一致,返回值为该函数构造的 JavaScript 对象的 JsValue 封装。
JsContext context()
返回 JsValue 隶属的 JsContext
boolean isArray()
是否是 JavaScript 数组。
boolean isArrayBufferOrArrayBufferView()
是否是 JavaScript ArrayBufferArrayBufferView 对象。
boolean isBoolean()
是否是 JavaScript 布尔值。
boolean isFunction()
是否是 JavaScript 函数。
boolean isInteger()
是否是 JavaScript 整型。
boolean isJavascriptInterface()
是否是通过 addJavascriptInterface(Object, String) 注入的 Java 对象。
boolean isNull()
是否是 JavaScript null
boolean isNumber()
是否是 JavaScript 数值。
boolean isObject()
是否是 JavaScript 对象。
boolean isPromise()
是否是 JavaScript Promise。
boolean isString()
是否是 JavaScript 字符串。
boolean isUndefined()
是否是 JavaScript undefined
void reject(Object value)
如果是 JavaScript Promise,则将 value 转为对应类型的 JavaScript 数据,并 执行 Promise 失败回调。
void resolve(Object value)
如果是 JavaScript Promise,则将 value 转为对应类型的 JavaScript 数据,并 执行 Promise 成功回调。
boolean toBoolean()
转换为 Java 布尔值。
ByteBuffer toByteBuffer()
转换为 Java ByteBuffer 对象。
int toInteger()
转换为 Java 整型。
Object toJavascriptInterface()
返回 Java 对象。
Number toNumber()
转换为 Java 数值。
<T> T toObject(Class<T> clazz)
转换为指定 Java 类型的对象,调用该对象的 Java 方法会映射为调用潜在 JavaScript 对象的 JavaScript 方法。 如,JavaScript 代码中申明了对象:
 
 
var sample = {};
 sample
.empty = function() { console.log("call sample#empty"); }
 sample
.primitive = function(c) { console.log("call sample#primitive", c); return 1; }
 sample
.object = function(o) { console.log("call sample#object", o); return "123"; }
 

 
则可在 Java 代码中声明签名一致的类型:
 
 
public interface Sample {
     
void empty();
 
     
byte primitive(char c);
 
     
String object(Object o);
 
}
 

 
并直接以 Java 签名方式使用:
 
 context
.evaluateScriptAsync("sample", new ValueCallback() {
   
@Override
     
public void onReceiveValue(JsValue value) {
         
if (value != null && value.isObject()) {
             
Sample sample = value.toObject(Sample.class);
             sample
.empty();
             
byte b = sample.primitive('a');  // b is 1
             
String s = sample.object(null);  // s is "123"
         
}
     
}
 
}, null);
 

 
String toString()
转换为 Java 字符串。
Protected Methods
static IX5JsValue.JsValueFactory factory()
[Expand]
Inherited Methods
From class java.lang.Object

Protected Constructors

protected JsValue (JsContext context, IX5JsValue value)

Public Methods

public JsValue call (Object... args)

如果是 JavaScript 函数,则将输入参数一一转为对应类型的 JavaScript 数据,并调用该 JavaScript 函数;否则,直接返回 null。 可用于 JavaScript 调用 Java 函数的回调函数。如申明了 JavascriptInterface 接口:

 
 
public class AsyncTaskSample {
     
private JsValue callback;
 
   
@JavascriptInterface
     
public void doTask(String data, JsValue callback) {
         mCallback
= callback;
     
}
 
     
private void onCompleted() {
         
if (mCallback != null && mCallback.isFunction()) {
             
String s = mCallback.call("321");
         
}
     
}
 
}
 

 
则可在 JavaScript 中调用:
 
 sample
.doTask("123", function(result) { console.log(result); });
 

 

Parameters
args 函数的输入参数
Returns
  • 如果是 JavaScript 函数,返回该函数调用后的返回值;否则,返回 null

public JsValue construct (Object... args)

如果是 JavaScript 函数,则将输入参数一一转为对应类型的 JavaScript 数据,并作为 构造函数 调用该 JavaScript 函数;否则,直接返回 null。 用法与 call(Object...) 一致,返回值为该函数构造的 JavaScript 对象的 JsValue 封装。

Parameters
args 函数的输入参数
Returns
  • 如果是 JavaScript 函数,返回该函数调用后的返回值;否则,返回 null

public JsContext context ()

返回 JsValue 隶属的 JsContext

public boolean isArray ()

是否是 JavaScript 数组。

public boolean isArrayBufferOrArrayBufferView ()

是否是 JavaScript ArrayBufferArrayBufferView 对象。

public boolean isBoolean ()

是否是 JavaScript 布尔值。

public boolean isFunction ()

是否是 JavaScript 函数。

public boolean isInteger ()

是否是 JavaScript 整型。

public boolean isJavascriptInterface ()

是否是通过 addJavascriptInterface(Object, String) 注入的 Java 对象。

public boolean isNull ()

是否是 JavaScript null

public boolean isNumber ()

是否是 JavaScript 数值。

public boolean isObject ()

是否是 JavaScript 对象。

public boolean isPromise ()

是否是 JavaScript Promise。

public boolean isString ()

是否是 JavaScript 字符串。

public boolean isUndefined ()

是否是 JavaScript undefined

public void reject (Object value)

如果是 JavaScript Promise,则将 value 转为对应类型的 JavaScript 数据,并 执行 Promise 失败回调。

Parameters
value 传给 Promise 执行失败回调的参数

public void resolve (Object value)

如果是 JavaScript Promise,则将 value 转为对应类型的 JavaScript 数据,并 执行 Promise 成功回调。

Parameters
value 传给 Promise 执行成功回调的参数

public boolean toBoolean ()

转换为 Java 布尔值。

Returns
  • 如果是 JavaScript 布尔值,则返回对应的 Java 布尔值;否则,返回 false

public ByteBuffer toByteBuffer ()

转换为 Java ByteBuffer 对象。

Returns
  • 如果是 JavaScript ArrayBufferArrayBufferView 对象,则返回对应的 Java ByteBuffer 对象;否则,返回 null

public int toInteger ()

转换为 Java 整型。

Returns
  • 如果是 JavaScript 整型,则返回对应的 Java 整型;否则,返回 0

public Object toJavascriptInterface ()

返回 Java 对象。

Returns

public Number toNumber ()

转换为 Java 数值。

Returns
  • 如果是 JavaScript 数值类型,则返回对应的 Java 数值;否则,返回 null

public T toObject (Class<T> clazz)

转换为指定 Java 类型的对象,调用该对象的 Java 方法会映射为调用潜在 JavaScript 对象的 JavaScript 方法。 如,JavaScript 代码中申明了对象:

 
 
var sample = {};
 sample
.empty = function() { console.log("call sample#empty"); }
 sample
.primitive = function(c) { console.log("call sample#primitive", c); return 1; }
 sample
.object = function(o) { console.log("call sample#object", o); return "123"; }
 

 
则可在 Java 代码中声明签名一致的类型:
 
 
public interface Sample {
     
void empty();
 
     
byte primitive(char c);
 
     
String object(Object o);
 
}
 

 
并直接以 Java 签名方式使用:
 
 context
.evaluateScriptAsync("sample", new ValueCallback() {
   
@Override
     
public void onReceiveValue(JsValue value) {
         
if (value != null && value.isObject()) {
             
Sample sample = value.toObject(Sample.class);
             sample
.empty();
             
byte b = sample.primitive('a');  // b is 1
             
String s = sample.object(null);  // s is "123"
         
}
     
}
 
}, null);
 

 

Parameters
clazz 指定转换的目标 Java Interface。
Returns
  • 返回目标 Java Interface 的 Proxy 实例对象。

public String toString ()

转换为 Java 字符串。

Returns
  • 如果是 JavaScript 字符串类型,则返回对应的 Java 字符串;否则,返回 null

Protected Methods

protected static IX5JsValue.JsValueFactory factory ()