Execute JavaScript
webforJ 在服务器上运行,但有时你需要访问客户端:滚动窗口、聚焦字段、读取浏览器值或调用 web 组件上的方法。HasJsExecution 接口提供了这座桥。它在两个层次上实现:
这两个层次都暴露出相同的三个方法,因此一旦你了解了下面的形状,无论是在 Page 还是 Element 上调用它们,它们的读法都是相同的。
执行方法
每个层次提供一个同步方法和两个异步方法。区别在于调用线程是否等待,以及是否有结果返回。
-
executeJs(String script): 同步运行脚本。执行线程 被阻塞,直到客户端返回,这需要一个服务器到客户端的往返时间。结果作为Object返回,你可以在 Java 中进行转换和使用。 -
executeJsAsync(String script): 异步运行脚本,不会阻塞执行线程。它返回一个PendingResult,该结果在脚本结束时完成,因此你可以在稍后处理结果。 -
executeJsVoidAsync(String script): 异步运行脚本,并且不向服务器返回任何内容。对那些你不需要结果的火后即忘的工作使用它。自24.11以来可用。
选择方法
当你只是在客户端造成副作用(滚动、聚焦、调用方法)时,默认使用 executeJsVoidAsync。当你需要值但希望保持非阻塞时,使用 executeJsAsync,而将同步的 executeJs 保留给那些必须在下一行 Java 代码之前获得结果的罕见情况,因为它需要线程保持完整的往返时间。