2011-09-05 7 views
7

私はGWTアプリケーション内のネイティブ関数で作業しています。 .getElementById( "id")はnullを返しますが、$ doc.getElementById()は有効な要素を返します。 この方法の違いは(概念的に)どちらですか? ありがとうございます。

答えて

7

GWTアプリのコードは(非表示の)iframeで実行されるため、documentはそのiframeのドキュメント(iframeの閲覧コンテキスト)を参照します(window)。したがって、GWTは、GWTアプリケーションをロードする "ホストページ"のドキュメントと参照コンテキスト(ウィンドウ)を簡単に参照できるように、変数$doc$wndを初期化します。リンカーは、コンパイルされたコードがロードされる方法を決定

ノート、デフォルトの1(std)以降xsiframe利用のiframe、非推奨xs負荷に対し、同じブラウジング・コンテキスト(そう$doc == document$wnd == window

2

でコードGWT JSNI page

このコードでは、メソッド内で直接JavaScriptウィンドウオブジェクトを参照していないことに注意してください。 JSNIからブラウザのウィンドウとドキュメントオブジェクトにアクセスするときは、それらをそれぞれ$ wndと$ docとして参照する必要があります。コンパイルされたスクリプトはネストされたフレームで実行され、$ wndと$ docは自動的に初期化され、ホストページのウィンドウとドキュメントを正しく参照します。

関連する問題