用java脚本调用gwt函数
对不起,我知道以前有人问过这个问题,但我没法让它运行。谁能告诉我,为什么我的代码不起作用 我尝试的是:我想用html页面中的java脚本调用gwt函数。gwt函数创建一个int,返回它,javascript应该在html页面中解析它 我的java代码是:用java脚本调用gwt函数,java,javascript,gwt,Java,Javascript,Gwt,对不起,我知道以前有人问过这个问题,但我没法让它运行。谁能告诉我,为什么我的代码不起作用 我尝试的是:我想用html页面中的java脚本调用gwt函数。gwt函数创建一个int,返回它,javascript应该在html页面中解析它 我的java代码是: package com.test.client; import com.google.gwt.core.client.EntryPoint; public class TestCode implements EntryPoint { p
package com.test.client;
import com.google.gwt.core.client.EntryPoint;
public class TestCode implements EntryPoint {
public static native void exportTestReturn()/*-{
$wnd.testReturn = $entry(@com.test.client.TestCode::testReturn());
}-*/;
public static int testReturn(){
int testVar = 3;
return testVar;
}
public void onModuleLoad() {
exportTestReturn();
}
}
和我的html代码:
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>TestTitle</title>
<script type="text/javascript" language="javascript" src="com.test.TestCode/com.test.TestCode.nocache.js">
</script>
</head>
<body>
<iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
<p>Gwt html file tries to start gwt function and parse the return value</p>
<script>
document.write("JS output:" + testReturn() + "<br>");
</script>
</body>
</html>
测试标题
Gwt html文件尝试启动Gwt函数并解析返回值
编写(“JS输出:“+testReturn()+”
”);
您似乎是在GWTonModuleload
导出函数之前调用该函数的
GWT使用一个引导脚本(your_app.nocache.js),该脚本计算排列,然后异步加载应用程序脚本(xxxx.cache.js)
如果从浏览的javascript控制台调用函数,您可以看到它是有效的
将javascript代码配置为等待GWT代码完全加载,或者将其放入函数块并从JSNI方法调用
public static native void exportTestReturn()/*-{
$wnd.testReturn = $entry(@com.test.client.TestCode::testReturn());
$wnd.onLoad();
}-*/;
<script>
function onLoad() {
document.write("JS output:" + testReturn() + "<br>");
}
</script>
public静态本机void exportTestReturn()/*-{
$wnd.testReturn=$entry(@com.test.client.TestCode::testReturn());
$wnd.onLoad();
}-*/;
函数onLoad(){
编写(“JS输出:“+testReturn()+”
”);
}
如果您希望等待gwt加载完成,请在循环中输入,直到gwt加载时在window对象中设置的任何var存在,但这是一个非常棘手的解决方案:
<script>
(function loopWaitGwtReady() {
setTimeout(function () {
if (window.__gwt_activeModules)
document.write("JS output:" + testReturn() + "<br>");
else
loopWaitGwtReady()
}, 50)
})();
</script>
(函数loopWaitGwtReady(){
setTimeout(函数(){
if(窗口\ gwt\活动模块)
编写(“JS输出:“+testReturn()+”
”);
其他的
loopwaitgwtreedy()
}, 50)
})();
谢谢你的快速回答,但这对我不起作用。如果我添加$wnd.onLoad()
并将文档行放入您告诉我的函数中,我得到以下错误:[error][com.test.TestCode]无法加载模块入口点类com.test.client.TestCode(有关详细信息,请参阅关联的异常)com.google.gwt.core.client.JavaScriptException:(TypeError)@com.test.client.TestCode::exportTestReturn()([]):$wnd.onLoad不是一个函数
答案中有一个小错误-它应该是function onLoad(){
,而不是onLoad()){
。进行此更改将正确声明函数,以便可以从GWT代码中调用它。谢谢,这是有效的:-)其他解决方案将如何实现?如何使我的javascript代码等待GWT代码完全加载?编辑我的响应,并使用一个循环等待GWT可用。对不起,我没有时间进行测试所以你确定你的第二个例子是正确的吗?为什么整个函数都在括号()中?