java.lang.Object | |
↳ | com.tencent.smtt.sdk.JsContext |
每个 JsContext
实例表示一个 JavaScript 执行环境,用于执行 JavaScript 脚本,访问 JavaScript
中定义和计算出的值,以及创建供 JavaScript 访问的对象、方法和函数。
Nested Classes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
interface | JsContext.ExceptionHandler | 由需要处理 JavaScript 异常的对象实现,如异常上报等。
|
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
JsContext(Context context)
创建新的
JsContext 对象。
系统内核下,会进行创建系统 WebView 事例以支持 JsContext 能力, | |||||||||||
JsContext(JsVirtualMachine virtualMachine)
创建隶属于指定
JsVirtualMachine 的 JsContext 对象。
指定 JsVirtualMachine 可以覆盖 JavaScript 虚拟机的执行线程或提前做一些初始化的操作,参见
JsVirtualMachine(Context, android.os.Looper)
;也可以实现多个隶属于相同 JsVirtualMachine 的 JsContext 实例相互传递
JavaScript 对象。 |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void |
addJavascriptInterface(Object object, String name)
将 Java 对象注入到
JsContext 中。注意,导出的 Java 方法必须有 @
JavascriptInterface 注解,且方法不能混淆。
| ||||||||||
static JsContext |
current()
返回当前执行 JavaScript 的
JsContext ,线程独立。 | ||||||||||
void | destroy() | ||||||||||
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 非空, 则会在执行结束后在 执行线程 将返回结果以 字符串形式 回调。
| ||||||||||
JsValue |
evaluateScript(String script)
evaluateScript(String, URL) 的简便方法。同步异步执行
JavaScript,并直接以 对象形式 返回执行结果。 | ||||||||||
JsValue |
evaluateScript(String script, URL sourceURL)
同步异步执行 JavaScript,将
sourceURL 作为调试时显示的脚本来源, 并直接以 对象形式
返回执行结果。
| ||||||||||
void |
evaluateScriptAsync(String script, ValueCallback<JsValue> resultCallback, URL sourceURL)
异步执行 JavaScript,将
sourceURL 作为调试时显示的脚本来源,如果
resultCallback 非空, 则会在执行结束后在 原始线程 将返回结果以 对象形式 回调。
| ||||||||||
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) | ||||||||||
JsVirtualMachine |
virtualMachine()
为了创建关联特定的
JsVirtualMachine 的 JsContext ,允许隶属同一个
JsVirtualMachine 的 JsContext 之间传递 JavaScript 对象, 使用
JsVirtualMachine#createJsContext 方法。 |
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
java.lang.Object
|
创建隶属于指定 JsVirtualMachine
的 JsContext
对象。
指定 JsVirtualMachine
可以覆盖 JavaScript 虚拟机的执行线程或提前做一些初始化的操作,参见
JsVirtualMachine(Context, android.os.Looper)
;也可以实现多个隶属于相同 JsVirtualMachine
的 JsContext
实例相互传递
JavaScript 对象。
virtualMachine | 隶属的 JsVirtualMachine
|
---|
将 Java 对象注入到 JsContext
中。注意,导出的 Java 方法必须有 @
JavascriptInterface 注解,且方法不能混淆。
class JsObject {
@JavascriptInterface
public String toString() { return "injectedObject"; }
}
context.addJavascriptInterface(new JsObject(), "injectedObject");
object | 注入到 JsContext 中的 Java 对象。忽略 null 对象。 |
---|---|
name | JavaScript 中用于访问该对象的名字。 |
evaluateJavascript(String, ValueCallback, URL)
的简便方法。异步执行 JavaScript,如果 resultCallback
非空, 则会在执行结束后在 执行线程
将返回结果以 字符串形式 回调。
script | 需要执行的 JavaScript 源码。 |
---|---|
resultCallback | 脚本执行完毕后会调用该回调传递 JavaScript 返回结果。 |
异步执行 JavaScript,将 sourceURL
作为调试时显示的脚本来源,如果
resultCallback
非空, 则会在执行结束后在 执行线程 将返回结果以 字符串形式 回调。
context.evaluateJavascript("foo()", new ValueCallback() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "evaluateJavascript value:" + value);
}
});
script | 需要执行的 JavaScript 源码。 |
---|---|
resultCallback | 脚本执行完毕后会调用该回调传递 JavaScript 返回结果。 |
sourceURL | 脚本来源,用于调试。 |
evaluateScript(String, URL)
的简便方法。同步异步执行
JavaScript,并直接以 对象形式 返回执行结果。
script | 需要执行的 JavaScript 源码。 |
---|
同步异步执行 JavaScript,将 sourceURL
作为调试时显示的脚本来源, 并直接以 对象形式
返回执行结果。
JsValue result = context.evaluateScript("123456");
if (result != null && result.isInteger()) {
Log.e(TAG, "evaluateScript result:" + result.toInteger());
}
script | 需要执行的 JavaScript 源码。 |
---|---|
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());
}
}
});
script | 需要执行的 JavaScript 源码。 |
---|---|
resultCallback | 脚本执行完毕后会调用该回调传递 JavaScript 返回结果。 |
sourceURL | 脚本源,用于调试。 |
返回异常处理对象。
JsContext.ExceptionHandler
实例或 null
。
id | native buffer对应的id号 |
---|
移除先前由 addJavascriptInterface(Object, String)
注入的 Java 对象。
name | JavaScript 中用于访问该对象的名字。 |
---|
设置异常处理对象。
exceptionHandler | 设置的 JsContext.ExceptionHandler 实例或者 null 。
|
---|
id | native buffer对应的id号 |
---|---|
buffer | 需要传递到native buffer中的数据 |
为了创建关联特定的 JsVirtualMachine
的 JsContext
,允许隶属同一个
JsVirtualMachine
的 JsContext
之间传递 JavaScript 对象, 使用
JsVirtualMachine#createJsContext 方法。