2016-09-07 12 views
0

UiBinderによって作成された要素の要素IDを受け入れるjavascript関数をGWTから呼び出したいとします。その要素が見つからないため、関数が失敗します。いくつかのデバッグ後、私はこの奇妙な行動を発見した:中DOM要素がGWTネイティブ関数から呼び出されたjavascriptからアクセスできない

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は自動的に初期化され、ホストページのウィンドウとドキュメントを正しく参照します。

関連する問題