企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
JxBrowser API提供的功能允许在加载的网页上访问和执行JavaScript代码。 注意:要访问JavaScript,请确保完全加载网页并启用JavaScript支持。 JxBrowser提供了两种JavaScript代码执行方式: ### 执行JavaScript 要异步执行JavaScript代码,在执行代码之前不阻止当前线程执行并忽略返回值,请使用Browser.executeJavaScript(String javaScript)方法。此方法告诉Chromium引擎异步执行给定的JavaScript代码。忽略JavaScript代码执行的返回值。 以下代码使用“我的标题”值更新document.title属性: ``` browser.executeJavaScript("document.title = 'My title';"); ``` ### 执行JavaScript并返回值 要执行JavaScript代码并返回值,请使用Browser.executeJavaScriptAndReturnValue(String javaScript)方法。此方法阻止当前线程执行并等待代码执行。执行结果存储在JSValue对象中。 以下代码使用“My title”值更新document.title属性,并使用表示document.title值的字符串值返回JSValue对象: ``` JSValue title = browser.executeJavaScriptAndReturnValue( "document.title = 'My title'; document.title"); System.out.println("title = " + title.getStringValue()); ``` ### 访问JavaScript对象 您可以使用Browser.executeJavaScriptAndReturnValue(String javaScript) 方法访问加载的网页上的JavaScript对象 。如果返回值表示JavaScript对象,则JSValue将包含表示JavaScript对象的Java包装器的JSObject实例。 JSObject 类提供了允许使用JavaScript对象属性并调用其函数的功能。 #### 获得属性 要访问JavaScript对象属性,请使用JSObject.getProperty(String name)方法。以下代码演示了如何获取document.title 属性的值 : JSValue document = browser.executeJavaScriptAndReturnValue("document"); JSValue titleValue = document.asObject().getProperty("title"); String title = titleValue.getStringValue(); #### 设置属性 要使用指定值修改JavaScript对象属性,请使用JSObject.setProperty(String name,Object value) 方法。以下代码演示了如何使用“My title”值修改 document.title属性: ``` JSValue document = browser.executeJavaScriptAndReturnValue("document"); document.asObject().setProperty("title", "My title"); ``` #### 使用功能 JavaScript对象属性可以表示一个函数(JSFunction)。您可以使用以下方法调用JavaScript对象函数: ``` JSValue document = browser.executeJavaScriptAndReturnValue("document"); JSValue write = document.asObject().getProperty("write"); write.asFunction().invoke(document.asObject(), "<html><body>Hello</body></html>"); ``` 从JxBrowser 6.9开始,您还可以异步调用JavaScript函数并通过Future <JSValue>对象访问调用的结果: > 没弄明白????????????????????? ``` JSValue document = browser.executeJavaScriptAndReturnValue("document"); JSValue async = document.asObject().getProperty("asyncFunc"); Future<JSValue> asyncResult = async.asFunction().invokeAsync(document.asObject(), "Hello World Async!"); String result = asyncResult.get().asString().getStringValue(); ``` #### 使用数组 JSValue可以表示一个Array(JSArray)。您可以使用以下方法访问数组的元素: ``` JSValue array = browser.executeJavaScriptAndReturnValue("['John', 'Doe', 46];"); JSValue john = array.asArray().get(0); JSValue doe = array.asArray().get(1); ``` ### Java到JavaScript类型的转换 JavaScript和Java使用不同的原始类型。JxBrowser实现从Java到JavaScript类型的自动类型转换。以下是JxBrowser将Java对象转换为JavaScript等价物的方法: ![](https://box.kancloud.cn/1c8a26dc117e24f7e7946254fe25a608_414x678.png)