1

我试图从小程序调用 Javascript 方法,我阅读了一些示例,但没有任何效果。

小程序:

        JSObject window = JSObject.getWindow(this);
        String[] args = new String[]{"some string"};
        window.call("alert2 ", args);

GWT,查看

    public static native void export() /*-{
    $wnd.alert2 = function(result) {
        @cl.covepa.client.main.shared.view.DlgVerificarHuellaView::alert2(Ljava/lang/String;)(result);
    }
}-*/;

public static void alert2(String result) {
    Dialogs.getInstance().alert("CONFIRMACION :" + result);
}

在构造函数调用中,我也在 onModuleLoad 中进行了测试。

export();

当小程序运行时,它说

JavaScript 对象上没有这样的方法“alert2”

没关系,我知道代码被混淆了,但我想这是方法保留其名称的方式,但不起作用,我仍然在客户端看到这个

function dBb(){$wnd.alert2=function(a){T2c((!S2c&&(S2c=new X2c),S2c),'CONFIRMACION :'+a)}}

我想念什么?!谢谢

更新 :

HTMLPanel 包含一个带有此字符串的 HTML 对象,它在显示对话框中添加。

<div> 
   <applet id="uploadApplet" code="app.VerifHuella.class" 
           archive="VerificarHuella.jar" width="322" height="465" MAYSCRIPT>
       <param name="RUT" value="15645322"/>
   </applet> 
</div>
4

1 回答 1

2

您的问题似乎是您调用该方法时该方法在窗口中不可用。这可能是因为三个原因:

  • 在 gwt 排列的异步加载发生之前,您的 appled 运行。
  • 你没有export()在你的onModuleLoad()
  • 你的 alert2 方法不是静态的

无论如何,如果您想在不使用一行 jsni 的情况下导出类和方法,您可以尝试gwtexporter,在您的情况下,您的代码可能如下所示:

 class DlgVerificarHuellaView implements Exportable {
    @Export($wnd.alert2)
    public static void alert2(String msg) {
    }
 }

另一种无需编写 jsni 即可导出函数的好方法是使用gwtquery

import static com.google.gwt.query.client.GQuery.*

Properties wnd = window.cast();
wnd.setFunction("alert2", new Function() {
  public void f() {
    Properties arg = getDataProperties();
    DlgVerificarHuellaView.alert2(arg.get(0));
  }
});
于 2013-03-19T20:32:37.420 回答