2014-12-02 75 views
0

您好我正在嘗試從java調用.js文件中的函數。GWT:從Java調用JavaScript函數

在我的Java代碼中,我有

@Override 
public native void test() 
/*-{ 
    //JAVASCRIPT 
    $wnd.h8(); 
}-*/; 

只是一個提示的方法作品裏面,但我不能把我的功能之一。我試過了$ wnd,$ doc和什麼也沒有。

說我有在它與這個functions.js:

function h8(){ 
    alert("hi"); 
} 

在我的索引我有:

<!doctype html> 
<html> 
     <head> 

       <title>GWT Test</title> 
       <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
       <link href="styles.css" rel="stylesheet" type="text/css"> 
       <script src="js/functions.js"></script> 

     </head> 

     <body> 
       <div align="center" id="embed-html"></div> 
       <script type="text/javascript" src="html/html.nocache.js"></script> 
     </body> 

</html> 

所以你看到我加載腳本文件中的HTML,但我得到'未定義不是函數'的錯誤。沒有$ doc或$ wnd我得到無法找到變量h8錯誤。

這是控制檯錯誤:

GwtApplication: exception: (TypeError) 
line: 112978 
column: 10 
sourceURL: http://127.0.0.1:9876/html/52574FB8FF8725CA72DFF813B62FEE86.cache.js 
__gwt$exception: <skipped>: undefined is not a function (evaluating '$wnd.h8()') 
(TypeError) 
line: 112978 
column: 10 
sourceURL: http://127.0.0.1:9876/html/52574FB8FF8725CA72DFF813B62FEE86.cache.js 
__gwt$exception: <skipped>: undefined is not a function (evaluating '$wnd.h8()') 
+1

如果你在JS控制檯中調用h8(),會發生什麼?我想你正在做,但是你能檢查你是否在你的入口點調用了test()方法嗎? – 2014-12-02 06:43:46

+0

test()是從java調用的,因爲如果我爲簡單警報(「hey」)更改$ wnd.h8(),它會執行警報。 – yafrack 2014-12-02 16:59:32

+1

你沒有回答我的第一個問題,h8是否在開發控制檯工作。我想你正在其他範圍內定義。 – 2014-12-02 17:41:49

回答

3

您應該定義窗口函數:

Window.h8 = function() { 
    alert("!!!"); 
}; 

與$ WND訪問它。

private static native void callFunction() /*-{ 
    $wnd.h8(); 
}-*/; 
+0

我打電話給$ wnd.h8();從Java測試方法並且具有Window.h8 = function(){alert(「hi」); };在我的js文件中,仍然未定義不是一個函數... [gwt $例外::undefined不是函數(評估'$ wnd.h8()'] – yafrack 2014-12-02 17:03:42

+0

這是window.h8小寫。 。 – yafrack 2014-12-02 17:49:24