从手册中无法理解:如何从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 …Run Code Online (Sandbox Code Playgroud) 所以,我正在GWT中为嵌入式Web浏览器(Sketchup)设计一个应用程序.我可以通过将window.location值更改为"skp :: myFunciton @ myParams"来控制Sketchup.Sketchup可以在浏览器中执行javascript.我想做的是让sketchup给我模型的内容.
public static native void getModel() /*-{
$wnd.location = "skp:getModel@";
}-*/;
Run Code Online (Sandbox Code Playgroud)
在第二个草图后有一个结果.但是我们如何将它归还给gwt?问题是入口点实例启动了请求,而JSNI只能将静态方法映射到javascript.
我以为我有一个事件和元素的解决方案......
//Sketchup javascript
var gwtwidget = document.getElementById("myTextArea")
gwtwidget.value = "blahblah";
gwtwidget.onchange();
Run Code Online (Sandbox Code Playgroud)
然后听取GWT的变化.唉,它不起作用.Gwt自己的事件系统覆盖,汇集,阻止(或其他)事件.我应该采取什么方法?我已经通过网络搜索信息,但我当然无法理解它.我猜的答案是......
1从javascript(以某种方式)调用入口点实例方法
2从gwt中拾取一个事件,将由gwt(以某种方式)拾取
3设置排序的异步回调接口机制(不知何故)