2011-12-23 17 views
6

是否有可能從Javascript調用Java(GWT)方法?從文檔中也不清楚。這裏的所有示例http://code.google.com/intl/ru/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html演示了從JSNI(非JS)函數調用java函數。如何從Javascript中調用GWT 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

你可以調用返回的對象的javascrypt方法?並使用該對象? – 2015-12-05 05:30:48

回答

10

你的例子不會工作,因爲你正試圖在一些外部腳本中使用JSNI。如果你想從外部 JS調用的東西你需要使用這個question描述的方法或使用GWT exporter

UPDATE:

揭露GWT的東西最安全的辦法是在其他一些包裹調用功能。例如:

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

否則,你可能會遇到一些奇怪的錯誤在生產模式=)

+0

謝謝!你更新關心我的Update2嗎?我的意思是你建議不要編寫'$ [email protected] :: myFunction(*)(param)'?爲什麼? – Dims 2011-12-23 18:39:23

+0

這可能會阻止GWT進行一些基本的優化。性能影響很可能不會很大,但您應該記住它。另外你的方式只能用於靜態方法,如果你嘗試調用某個實例方法,它很可能會中斷。 – jusio 2011-12-23 18:43:47

+0

你可以調用一個返回對象的javascrypt方法嗎?並使用該對象? – 2015-12-05 05:33:44

相關問題