Какая разница между $ doc.getElementById ("id") и document.getElementById ("id") в JSNI - PullRequest
7 голосов
/ 05 сентября 2011

Я работаю в нативной функции внутри приложения GWT и попробовал два метода: document.getElementById ("id") возвращает значение null, но $ doc.getElementById () возвращает допустимый элемент.Какая разница (концептуально) между этими методами?Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 05 сентября 2011

Код вашего приложения GWT выполняется в (скрытом) iframe, поэтому document ссылается на документ iframe (и window контекст просмотра iframe). Таким образом, GWT инициализирует переменные $doc и $wnd, чтобы вы могли легко ссылаться на документ и контекст просмотра ( окно ) "главной страницы", которая загружает приложение GWT.

Обратите внимание, что компоновщики решают, каким образом загружается скомпилированный код, по умолчанию (std) и более новые xsiframe используют iframes, тогда как устаревший xs загружает ваш код в том же контексте просмотра (поэтому $doc == document и $wnd == window)

2 голосов
/ 05 сентября 2011

Со страницы GWT JSNI :

Обратите внимание, что код не ссылается на объект окна JavaScript непосредственно внутри метода.При доступе к окнам браузера и объектам документов из JSNI вы должны ссылаться на них как $ wnd и $ doc соответственно.Ваш скомпилированный скрипт выполняется во вложенном фрейме, и $ wnd и $ doc автоматически инициализируются для правильной ссылки на окно и документ главной страницы.

...