我正在尝试使用以下代码从Java调用JavaScript方法
native void notifyJs() /*-{
$wnd.foo();
}-*/;
JavaScript方法位于iframe内部,看起来像
function foo() {
alert("Do something");
}
但我收到此错误
SEVERE: (TypeError) : $wnd.foo is not a functioncom.google.gwt.core.client.JavaScriptException: (TypeError) : $wnd.foo is not a function
我已经读过我应该在.nocache.js
之前添加myScript,但在我的情况下我不能这样做。还有其他解决方案吗?
答案 0 :(得分:0)
错误消息准确地说明了您的问题:
foo
范围内没有函数$wnd
。
$wnd
是指您的GWT代码正在运行的iframe的父级,因此如果您将foo
方法放在iframe中,则无法找到它。
尝试将foo
方法放在* .html文件中,其中调用.nocache.js
。
参考您的问题,您在.nocache.js
后添加了javascript:
我也有同样的问题,我用一个计时器修复它,等待Js加载。
private native boolean isLoaded()/*-{
if (typeof $wnd.foo != 'undefined') {
return true;
}
return false;
}-*/;
private void tryNotifyJs() {
if (isLoaded()) {
notifyJs();
} else {
Scheduler.get().scheduleFixedDelay(new RepeatingCommand() {
@Override
public boolean execute() {
tryNotifyJs();
return false;
}
}, 100);
}
}
答案 1 :(得分:0)
我通过用$ wnd.frames [0]替换$ wnd解决了这个问题。 由于foo函数位于此框架内。