public final class

JsContext

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

Class Overview

每个 JsContext 实例表示一个 JavaScript 执行环境,用于执行 JavaScript 脚本,访问 JavaScript 中定义和计算出的值,以及创建供 JavaScript 访问的对象、方法和函数。

Summary

Nested Classes
interface JsContext.ExceptionHandler 由需要处理 JavaScript 异常的对象实现,如异常上报等。
 
 context
.setExceptionHandler(new JsContext.ExceptionHandler() {
   
@Override
     
public void handleException(JsContext context, JsError error) {
         
Log.e(TAG, "handleException message:" + error.getMessage());
     
}
 
});
 

 
 
Public Constructors
JsContext(Context context)
创建新的 JsContext 对象。 系统内核下,会进行创建系统 WebView 事例以支持 JsContext 能力,
JsContext(JsVirtualMachine virtualMachine)
创建隶属于指定 JsVirtualMachineJsContext 对象。 指定 JsVirtualMachine 可以覆盖 JavaScript 虚拟机的执行线程或提前做一些初始化的操作,参见 JsVirtualMachine(Context, android.os.Looper) ;也可以实现多个隶属于相同 JsVirtualMachineJsContext 实例相互传递 JavaScript 对象。
Public Methods
void addJavascriptInterface(Object object, String name)
将 Java 对象注入到 JsContext 中。注意,导出的 Java 方法必须有 @ JavascriptInterface 注解,且方法不能混淆
 
 
class JsObject {
   
@JavascriptInterface
     
public String toString() { return "injectedObject"; }
 
}
 
 context
.addJavascriptInterface(new JsObject(), "injectedObject");
 

 
static JsContext current()
返回当前执行 JavaScript 的 JsContext,线程独立。
void destroy()
销毁 JsContext。一旦调用了本方法,再使用这个 JsContext 或隶属于它的任何对象都是不合法的。
void evaluateJavascript(String script, ValueCallback<String> resultCallback)
evaluateJavascript(String, ValueCallback, URL) 的简便方法。异步执行 JavaScript,如果 resultCallback 非空, 则会在执行结束后在 执行线程 将返回结果以 字符串形式 回调。
void evaluateJavascript(String script, ValueCallback<String> resultCallback, URL sourceURL)
异步执行 JavaScript,将 sourceURL 作为调试时显示的脚本来源,如果 resultCallback 非空, 则会在执行结束后在 执行线程 将返回结果以 字符串形式 回调。
 
 context
.evaluateJavascript("foo()", new ValueCallback() {
   
@Override
     
public void onReceiveValue(String value) {
         
Log.e(TAG, "evaluateJavascript value:" + value);
     
}
 
});
 

 
JsValue evaluateScript(String script)
evaluateScript(String, URL) 的简便方法。同步异步执行 JavaScript,并直接以 对象形式 返回执行结果。
JsValue evaluateScript(String script, URL sourceURL)
同步异步执行 JavaScript,将 sourceURL 作为调试时显示的脚本来源, 并直接以 对象形式 返回执行结果。
 
 
JsValue result = context.evaluateScript("123456");
 
if (result != null && result.isInteger()) {
     
Log.e(TAG, "evaluateScript result:" + result.toInteger());
 
}
 

 
void evaluateScriptAsync(String script, ValueCallback<JsValue> resultCallback, URL sourceURL)
异步执行 JavaScript,将 sourceURL 作为调试时显示的脚本来源,如果 resultCallback 非空, 则会在执行结束后在 原始线程 将返回结果以 对象形式 回调。
 
 context
.evaluateScriptAsync("true", new ValueCallback() {
   
@Override
     
public void onReceiveValue(JsValue value) {
         
if (result != null && result.isBoolean()) {
             
Log.e(TAG, "evaluateScriptAsync result:" + result.toBoolean());
         
}
     
}
 
});
 

 
JsContext.ExceptionHandler exceptionHandler()
返回异常处理对象。
byte[] getNativeBuffer(int id)
int getNativeBufferId()
String name()
用于远程调试的名字。
void removeJavascriptInterface(String name)
移除先前由 addJavascriptInterface(Object, String) 注入的 Java 对象。
void setExceptionHandler(JsContext.ExceptionHandler exceptionHandler)
设置异常处理对象。
void setName(String name)
设置 JsContext 的描述名称。
int setNativeBuffer(int id, byte[] buffer)
void stealValueFromOtherCtx(String stealName, JsContext fromCtx, String name)
在当前 JsContext 的全局对象下添加属性名为 stealName 的对象,对象的值为 fromCtx 中名 name 的对象。
JsVirtualMachine virtualMachine()
为了创建关联特定的 JsVirtualMachineJsContext,允许隶属同一个 JsVirtualMachineJsContext 之间传递 JavaScript 对象, 使用 JsVirtualMachine#createJsContext 方法。
[Expand]
Inherited Methods
From class java.lang.Object

Public Constructors

public JsContext (Context context)

创建新的 JsContext 对象。 系统内核下,会进行创建系统 WebView 事例以支持 JsContext 能力,

Parameters
context JsContext 运行的 context。

public JsContext (JsVirtualMachine virtualMachine)

创建隶属于指定 JsVirtualMachineJsContext 对象。 指定 JsVirtualMachine 可以覆盖 JavaScript 虚拟机的执行线程或提前做一些初始化的操作,参见 JsVirtualMachine(Context, android.os.Looper) ;也可以实现多个隶属于相同 JsVirtualMachineJsContext 实例相互传递 JavaScript 对象。

Parameters
virtualMachine 隶属的 JsVirtualMachine

Public Methods

public void addJavascriptInterface (Object object, String name)

将 Java 对象注入到 JsContext 中。注意,导出的 Java 方法必须有 @ JavascriptInterface 注解,且方法不能混淆

 
 
class JsObject {
   
@JavascriptInterface
     
public String toString() { return "injectedObject"; }
 
}
 
 context
.addJavascriptInterface(new JsObject(), "injectedObject");
 

 

Parameters
object 注入到 JsContext 中的 Java 对象。忽略 null 对象。
name JavaScript 中用于访问该对象的名字。

public static JsContext current ()

返回当前执行 JavaScript 的 JsContext,线程独立。

Returns
  • 当前执行 JavaScript 的 JsContext,可能为空

public void destroy ()

销毁 JsContext。一旦调用了本方法,再使用这个 JsContext 或隶属于它的任何对象都是不合法的。

public void evaluateJavascript (String script, ValueCallback<String> resultCallback)

evaluateJavascript(String, ValueCallback, URL) 的简便方法。异步执行 JavaScript,如果 resultCallback 非空, 则会在执行结束后在 执行线程 将返回结果以 字符串形式 回调。

Parameters
script 需要执行的 JavaScript 源码。
resultCallback 脚本执行完毕后会调用该回调传递 JavaScript 返回结果。

public void evaluateJavascript (String script, ValueCallback<String> resultCallback, URL sourceURL)

异步执行 JavaScript,将 sourceURL 作为调试时显示的脚本来源,如果 resultCallback 非空, 则会在执行结束后在 执行线程 将返回结果以 字符串形式 回调。

 
 context
.evaluateJavascript("foo()", new ValueCallback() {
   
@Override
     
public void onReceiveValue(String value) {
         
Log.e(TAG, "evaluateJavascript value:" + value);
     
}
 
});
 

 

Parameters
script 需要执行的 JavaScript 源码。
resultCallback 脚本执行完毕后会调用该回调传递 JavaScript 返回结果。
sourceURL 脚本来源,用于调试。

public JsValue evaluateScript (String script)

evaluateScript(String, URL) 的简便方法。同步异步执行 JavaScript,并直接以 对象形式 返回执行结果。

Parameters
script 需要执行的 JavaScript 源码。
Returns
  • 脚本生成的最后一个值,可能会返回空。

public JsValue evaluateScript (String script, URL sourceURL)

同步异步执行 JavaScript,将 sourceURL 作为调试时显示的脚本来源, 并直接以 对象形式 返回执行结果。

 
 
JsValue result = context.evaluateScript("123456");
 
if (result != null && result.isInteger()) {
     
Log.e(TAG, "evaluateScript result:" + result.toInteger());
 
}
 

 

Parameters
script 需要执行的 JavaScript 源码。
sourceURL 脚本源,用于调试。
Returns
  • 脚本生成的最后一个值,可能会返回空。

public void evaluateScriptAsync (String script, ValueCallback<JsValue> resultCallback, URL sourceURL)

异步执行 JavaScript,将 sourceURL 作为调试时显示的脚本来源,如果 resultCallback 非空, 则会在执行结束后在 原始线程 将返回结果以 对象形式 回调。

 
 context
.evaluateScriptAsync("true", new ValueCallback() {
   
@Override
     
public void onReceiveValue(JsValue value) {
         
if (result != null && result.isBoolean()) {
             
Log.e(TAG, "evaluateScriptAsync result:" + result.toBoolean());
         
}
     
}
 
});
 

 

Parameters
script 需要执行的 JavaScript 源码。
resultCallback 脚本执行完毕后会调用该回调传递 JavaScript 返回结果。
sourceURL 脚本源,用于调试。

public JsContext.ExceptionHandler exceptionHandler ()

返回异常处理对象。

Returns

public byte[] getNativeBuffer (int id)

Parameters
id native buffer对应的id号
Returns
  • 返回id对应buffer中的内容

public int getNativeBufferId ()

Returns
  • 返回native buffer对应的id号,大于0则获取成功,否则失败

public String name ()

用于远程调试的名字。

Returns

public void removeJavascriptInterface (String name)

移除先前由 addJavascriptInterface(Object, String) 注入的 Java 对象。

Parameters
name JavaScript 中用于访问该对象的名字。

public void setExceptionHandler (JsContext.ExceptionHandler exceptionHandler)

设置异常处理对象。

Parameters
exceptionHandler 设置的 JsContext.ExceptionHandler 实例或者 null

public void setName (String name)

设置 JsContext 的描述名称。

Parameters
name 设置的名称或者 null

public int setNativeBuffer (int id, byte[] buffer)

Parameters
id native buffer对应的id号
buffer 需要传递到native buffer中的数据
Returns
  • 是否设置成功。返回0则设置成功,否则失败

public void stealValueFromOtherCtx (String stealName, JsContext fromCtx, String name)

在当前 JsContext 的全局对象下添加属性名为 stealName 的对象,对象的值为 fromCtx 中名 name 的对象。

Parameters
stealName 当前 JsContext 添加的对象名
fromCtx JsContext 对象,用于获取其环境中的对象   
name 对象名,用其获取对应到对象值   

public JsVirtualMachine virtualMachine ()

为了创建关联特定的 JsVirtualMachineJsContext,允许隶属同一个 JsVirtualMachineJsContext 之间传递 JavaScript 对象, 使用 JsVirtualMachine#createJsContext 方法。

Returns