GWT JSNI找不到最近创建的元素

时间:2017-10-30 11:22:25

标签: javascript gwt jsni

我想在我的gwt代码中创建一个canvas元素。随后,我想应用第三方javascript库,以便在新创建的canvas dom元素上绘制。所以这是我想做的粗略想法:

public void onModuleLoad() {
        Canvas canvas = Canvas.createIfSupported();
        canvas.getElement().setId("canvas");
        canvas.setWidth("800px");
        canvas.setHeight("500px");
        canvas.getElement().getStyle().setProperty("border", "black solid 1px");

        RootPanel.get("rootDiv").clear();
        RootPanel.get("rootDiv").add(canvas);

        getCanvas();

上面的代码创建了一个新的canvas元素并将其添加到我当前的dom中。添加新画布后,我想应用JSNI来获取这个canvas元素。

public static native void getCanvas() /*-{
    console.log("Canvas? = " + document.getElementById("canvas"));
}-*/;

现在,我希望我找到了这个canvas元素。但是,我在控制台上得到以下输出:

Canvas? = null

为什么我无法访问我的新元素?

BTW:当我在Chrome的检查器中检查DOM时,我可以看到添加了带有指定ID的canvas元素。

1 个答案:

答案 0 :(得分:2)

应该是:

public static native void getCanvas() /*-{
    console.log("Canvas? = " + $wnd.document.getElementById("canvas"));
}-*/;

$wnd之前添加document

考虑使用JsInterop而不是JSNI。