从手册中无法理解:如何从Java运行JS函数?
例如,我的html页面中有一个函数:
<script type="text/javascript" language="javascript">
function foo() {
alert('Foo!');
}
</script>
Run Code Online (Sandbox Code Playgroud)
以下模块显示了两个按钮,其中只有第二个按钮有效:
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();
}-*/;
}
Run Code Online (Sandbox Code Playgroud)
在手册中说,在嵌套框架中实现本机函数,这解释了这种情况.但是如何运行JS函数呢?
更新1 以下工作.
Java的:
public static native void fooRunner() /*-{
$doc.fooRunner();
}-*/;
Run Code Online (Sandbox Code Playgroud)
JS:
<script type="text/javascript" language="javascript">
document.fooRunner = function foo() {
alert('Foo!');
}
</script>
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
你自己回答了你的问题。没有更好的方法,原因很简单:部署 GWT 应用程序的方法有多种,在 iframe 中运行只是其中一种选择。这就是为什么你必须使用 $wnd 变量来访问外部 JS 函数,所以如果你切换链接器,你的静态代码将正常工作。
| 归档时间: |
|
| 查看次数: |
14493 次 |
| 最近记录: |