【问题标题】:How to run JavaScript function from GWT Java with JSNI? [duplicate]如何使用 JSNI 从 GWT Java 运行 JavaScript 函数? [复制]
【发布时间】:2011-12-23 14:13:21
【问题描述】:

从手册中看不懂:实际上如何从 Java 中运行 JS 函数?

例如,我的html页面中有一个函数:

<script type="text/javascript" language="javascript">
    function foo() {
        alert('Foo!');
    }
</script>

以下模块显示了两个按钮,其中只有第二个有效:

public class Test_GoogleWeb_JSNI_01 implements EntryPoint {

public void onModuleLoad() {

    Button fooButton = new Button("Foo!");
    fooButton.addClickHandler(new ClickHandler(){
        public void onClick(ClickEvent event) {
            fooRunner();
        };
    });


    HTML fooButtonNative = new HTML();
    fooButtonNative.setHTML("<input type='button' value='Foo Native' onclick='foo()'>");

    RootPanel rootPanel = RootPanel.get();
    rootPanel.add(fooButton);
    rootPanel.add(fooButtonNative);

}

public static native void fooRunner() /*-{
  foo();
}-*/;
}

手册中说,原生函数是在嵌套框架中实现的,这说明了这种情况。但是那如何运行 JS 函数呢?

更新 1 以下工作。

Java:

public static native void fooRunner() /*-{
  $doc.fooRunner();
}-*/;

JS:

<script type="text/javascript" language="javascript">
    document.fooRunner = function foo() {
        alert('Foo!');
    }
</script>

有没有更好的办法?

【问题讨论】:

    标签: java gwt jsni


    【解决方案1】:

    你自己回答了你的问题。没有更好的方法,原因很简单:部署 GWT 应用程序有多种方法,在 iframe 中运行只是其中一种选择。所以这就是为什么你必须使用 $wnd 变量来访问外部 JS 函数,所以如果你切换链接器,你的静止代码就可以正常工作。

    【讨论】:

    • 你能调用一个返回对象的javascrypt方法吗?并使用那个对象?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多