我想从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,效果相同。
答案 0 :(得分:1)
当从JSNI访问浏览器的窗口和文档对象时,必须分别将它们引用为$ wnd和$ doc。您编译的脚本在嵌套框架中运行,$ wnd和$ doc会自动初始化,以正确引用主页的窗口和文档。