2016-09-07 42 views
0

我想從GWT調用一個JavaScript函數,該函數接受由UiBinder創建的元素的元素ID。函數失敗,因爲它找不到那個元素。一些調試後,我發現這種奇怪的行爲:DOM元素無法從JavaScript調用GWT本機功能

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

GWT JSNI Basics

當訪問從JSNI瀏覽器的窗口和文檔對象,必須引用它們分別$ WND和$文檔。您編譯的腳本以嵌套框架運行,$ wnd和$ doc會自動初始化以正確引用主機頁面的窗口和文檔。