是否可以从Javascript调用Java(GWT)方法?从文档中还不清楚。这里的所有示例http://code.google.com/intl/ru/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html演示了如何从JSNI(而不是JS)函数调用java函数。
更新1
这是一个Java代码:
public class Test_GoogleWeb_JSNI_02 implements EntryPoint {
/**
* This is the entry point method.
*/
public void onModuleLoad() {
}
public static void Callee() {
Window.alert("Callee");
}
}
以下是html中的来电按钮示例:
<input type='button' value='Call' onclick='Test02()'>
以下是我尝试过的一些功能,但没有奏效:
<script type="text/javascript">
function Test01() {
@com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()();
}
function Test02() {
com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()();
}
</script>
更新2
以下工作。
Java准备:
public void onModuleLoad() {
Prepare();
}
public static native void Prepare() /*-{
$doc.calleeRunner = @com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee();
}-*/;
public static void Callee() {
Window.alert("Callee");
}
呼叫者:
function Test03() {
document.calleeRunner();
}
有更好的方法吗?
答案 0 :(得分:11)
您的示例不起作用,因为您尝试在某些外部脚本中使用JSNI。如果您想从外部 JS中调用某些内容,则需要使用此question中描述的方法或使用GWT exporter
<强>更新强>
公开GWT的最安全的方法是将调用包装在其他函数中。例如:
public native void expose()/*-{
$wnd.exposedMethod = function(param){
@com.my.MyClass::myFunction(*)(param);
}
}-*/;
否则您可能会在生产模式中遇到一些奇怪的错误=)