document.getElementById () возвращает ноль при использовании mozrepl (но не в firebug) - PullRequest
2 голосов
/ 21 марта 2010

Я пытаюсь использовать расширение mozrepl Firefox, чтобы дать мне Javascript REPL изнутри emacs.

Я думаю, что я его правильно настроил.Я могу взаимодействовать с REPL из emacs и изучить документ, как описано на страницах учебника.Проблема возникает, когда я пытаюсь сделать что-то действительно простое, например получить контекст для элемента canvas:

repl> document.getElementById("mycanvas").getContext("2d")
!!! TypeError: document.getElementById("mycanvas") is null

Details:

  message: document.getElementById("mycanvas") is null
  fileName: chrome://mozrepl/content/repl.js -> file:///C:/Users/teamonkey/AppData/Roaming/Mozilla/Firefox/Profiles/chfdenuz.default/mozrepl.tmp.js
  lineNumber: 1
  stack:
    @chrome://mozrepl/content/repl.js -> file:///C:/Users/teamonkey/AppData/Roaming/Mozilla/Firefox/Profiles/chfdenuz.default/mozrepl.tmp.js:1
  name: TypeError

Это не просто конкретный экземпляр: любой вызов getElementById просто вернетnull.

Если я запускаю firebug, я могу ввести то же самое, и он вернет действительный контекст, но мне бы очень хотелось, чтобы REPL работал в emacs.Я не думаю, что это ошибка, но я, вероятно, неправильно настроил mozrepl.Кто-нибудь может помочь?

Mozrepl 1.0, Firefox 3.6

1 Ответ

3 голосов
/ 22 марта 2010

Когда вы начинаете, вы находитесь в контексте окна браузера , а не какого-либо конкретного документа. У вас есть доступ к элементам Chrome (меню, панели инструментов, вкладки и т. Д.). Объект document в настоящее время ссылается на окно браузера.

Для переключения контекста на документ в активной вкладке используйте:

repl.enter(content)

Теперь document объект - это документ, загруженный в активную вкладку, поэтому у вас есть доступ к его дереву DOM, которым он может манипулировать.

...