【发布时间】: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>
有没有更好的办法?
【问题讨论】: