Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Javascript调用GWT java函数?_Java_Javascript_Gwt_Jsni - Fatal编程技术网

如何从Javascript调用GWT java函数?

如何从Javascript调用GWT java函数?,java,javascript,gwt,jsni,Java,Javascript,Gwt,Jsni,可以从Javascript调用Java(GWT)方法吗?文件中也不清楚。这里的所有示例都演示了如何从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(

可以从Javascript调用Java(GWT)方法吗?文件中也不清楚。这里的所有示例都演示了如何从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()'>
来电者:

function Test03() {
        document.calleeRunner();
}

有更好的方法吗?

您的示例不起作用,因为您试图在一些外部脚本中使用JSNI。如果您想从外部JS调用某个东西,您需要使用本文中描述的方法或使用

更新:

公开GWT内容最安全的方法是将调用包装到其他函数中。例如:

    public native void expose()/*-{
    $wnd.exposedMethod = function(param){
         @com.my.MyClass::myFunction(*)(param);
    }
}-*/;

否则,您可能会在生产模式中遇到一些奇怪的错误=)

谢谢!你在更新我的更新吗?我的意思是,您是否建议不要编写
$wnd.exposedMethod=@com.my.MyClass::myFunction(*)(param)
?为什么?这可能会阻止GWT进行一些基本的优化。性能影响很可能不会很大,但您应该记住这一点。另外,您的方法只适用于静态方法的公开,如果您尝试调用某个实例方法,很可能会中断。您能调用返回对象的javascrypt方法吗?并使用该对象?公开的函数应该用
$entry(…)
函数包装,请参见:`$wnd.exposedMethod=$entry(函数(参数){…});可以这样调用非静态方法吗?可以调用返回对象的javascrypt方法吗?使用那个物体?
function Test03() {
        document.calleeRunner();
}
    public native void expose()/*-{
    $wnd.exposedMethod = function(param){
         @com.my.MyClass::myFunction(*)(param);
    }
}-*/;