无法从GWT本机函数调用的javascript访问DOM元素

时间:2016-09-07 07:13:18

标签: java gwt uibinder

我想从GWT调用一个javascript函数,它接受UiBinder创建的元素的元素id。函数失败,因为它找不到该元素。经过一些调试后,我发现了这种奇怪的行为:

log.info(DOM.getElementById("MyId").getAttribute("id"));
ScriptInjector.fromString("console.log(document.getElementById(\"MyId\"))").inject();
checkMyId();
log.info(DOM.getElementById("MyId").getAttribute("id"));

结果:

MyId
null
null
MyId

checkId定义为:

public static native void checkMyId()/*-{
    console.log(document.getElementById("MyId"));
}-*/;

ScriptInjector相比,DOM#getElementById和本机函数似乎都有限制访问元素。这种行为的原因是什么?如何调用javascript函数以便它可以访问该元素?

我尝试过使用gwt 2.8.0-beta1和2.8.0-rc1,效果相同。

1 个答案:

答案 0 :(得分:1)

GWT JSNI Basics

  

当从JSNI访问浏览器的窗口和文档对象时,必须分别将它们引用为$ wnd和$ doc。您编译的脚本在嵌套框架中运行,$ wnd和$ doc会自动初始化,以正确引用主页的窗口和文档。