gpt4 book ai didi

java - 从 Javascript JSNI 调用 Java

转载 作者:行者123 更新时间:2023-12-01 08:13:06 25 4
gpt4 key购买 nike

我正在使用 SmartGWT,并且希望从 JavaScript 访问 com.smartgwt.client.Version。在 Firefox 的 Web 控制台中,我尝试过:

frames[0].$entry(Lcom_smartgwt_client_Version::getVersion()));

frames[0].$entry(@com.smartgwt.client.Version.getVersion());

frames[0].$entry(@com.smartgwt.client.Version::getVersion());

frames[0].$entry(@com.smartgwt.client.Version::getVersion()());

但是它们都返回语法错误。

SmartGWT 与我的 WAR 一起部署,当我仅执行 frames[0] 时,我可以看到列出的其他 SmartGWT 类。

调用此静态 Java 方法的正确语法是什么?

最佳答案

除了 java 文件中的 JSNI 代码之外,这些 JSNI 引用不起作用。 JSNI 中对 Java 方法和字段的引用实际上并不是有效的 JavaScript,而是 JSNI 语言的一部分,以使这些 native 方法能够同时使用 Java 和 JavaScript。 JSNI 字符串 @com.smartgwt.client.Version::getVersion()() 将被重写为类似 PRETTY 中的 $getVersion1() 的内容,或者只是一个或在 OBF 模式下长度为两个字符,因此您不能依赖该方法名称相同。

相反,您需要从应用程序内部导出 JavaScript 函数,以便外部 JavaScript 可以调用它。查看https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI#calling有关于此的具体细节。

以下是您的应用程序中的示例:

public native void exportGetVersion() /*-{
$wnd.getSmartGwtVersion = $entry(function() {
return @com.smartgwt.client.Version::getVersion()();
});
}-*/;

确保您在应用程序中的某处调用此函数以导出该函数 - 调用该函数后的任何时间,您都可以从常规 JavaScript 调用 getSmartGwtVersion() - 无需使用 框架$entry

关于java - 从 Javascript JSNI 调用 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15795607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com