>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Получить значения переменных на странице http://forum.mozilla-russia.org/viewtopic.php?id=13614 |
Tearis > 07-11-2006 18:33:55 |
Допустим есть HTML-страница: Выделить код Код:<html><head> <script type="text/javascript"> var variable1 = 'variable1Value'; var variable2 = 4; var variable3 = new Array('elem1', 'elem2'); </script> </head> <body> ... </body> </html> Как из расширения получить значения переменных (variable1, variable2, ...) на этой странице? |
Dark-Demon > 07-11-2006 19:52:18 |
doc.defaultView, где doc - ссылка на документ страницы.
это как понимать? |
Tearis > 07-11-2006 21:09:19 |
alert(window._content.document.defaultView.variable1); Выводит undefined. Может быть "синтаксис" не такой? |
INFOMAN > 08-11-2006 04:43:10 |
overlay |
Dark-Demon > 08-11-2006 12:40:54 |
Tearis, DOM инспектором ковырялся? я что-то никакого _content у основного окна не нахожу. а вот в defaultView документа он имеется. |
Yan > 08-11-2006 16:53:24 |
Dark-Demon
и тем, что написал ты:
? Tearis
нужно использовать
Но при этом это будет небезопасный доступ к variable1. Почитать об этом можно тут: |
Tearis > 08-11-2006 19:59:27 |
Yan Добавлено Срд 08 Ноя 2006 20:13:35 : Почему нельзя использовать _content.document.defaultView. для этой цели? Ведь тут тоже проблем с перекрытием имен не должно оказываться (если я правильно понял о какой безопасности идет речь на приведенных страницах). |
Yan > 09-11-2006 20:42:39 |
Tearis
То, что доступ к небезопасным свойствам веб-страниц усложнён -- это хорошо, т.к. если программист и обращается к небезопасным объектам, то он безусловно знает, что делает -- принудительное использование wrappedJSObject послужит хорошим напоминанием. Выделить код Код:<html><head> <script type="text/javascript"> document.createElement = ' метод изменён'; </script> </head> <body> ... </body> </html> А потом из расширения проверяем, что нам выдадут различные способы обращения к createElement: Выделить код Код:alert('безопасный доступ:'+content.document.createElement); alert('НЕбезопасный доступ:'+_content.document.defaultView.document.wrappedJSObject.createElement); alert('НЕбезопасный доступ:'+content.document.wrappedJSObject.createElement); В общем, примерно так я считаю. Могу ошибаться, конечно.
Правильно. Если переменная уже объявлена, то её нельзя переназначать. вызовет такую же ошибку. Это с вышеизложенными случаями про безопасность никак не связано. |
Tearis > 10-11-2006 00:06:33 |
Я не первый день web-программированием занимаюсь Естественно я не объявлял нигде выше на странице константу "myVar". В IE и Opera все было нормально. |
Yan > 10-11-2006 01:16:45 |
Tearis Кстати, в Опере как раз alert(typeof window.console) выдаёт undefined, а в Firefox Object. |
Tearis > 26-12-2006 23:33:06 |
Возник соответствующий теме вопрос. Допустим я ловлю событие "DOMContentLoaded" и получаю ссылку на document той страницы которая инициировала это событие. Выделить код Код:window.addEventListener('DOMContentLoaded', function(e){ var doc = e.target; }, false); Как мне операясь на "doc" получить доступ к переменным конкретно этой страницы? |
Yan > 27-12-2006 00:10:14 |
Tearis
? У меня успешно работает вот такой пример, заточенный под страницу этого форума: Выделить код Код:getBrowser().addEventListener('DOMContentLoaded', function(e){ var x=e.target.defaultView.wrappedJSObject.google_color_text; alert(x?x:'переменная не определена -- не та страница'); }, false); При загрузке страницы выдаёт "000000" независимо от того, какая вкладка активна в момент загрузки. |
Tearis > 27-12-2006 20:28:55 |
Yan |
Shutnik > 17-08-2007 21:46:26 |
столкнулся с этим XPCNativeWrapper. ужасная вещь может кто-нибудь объяснить мне каким образом мне добраться скажем до документа? бюсь уже много времени, но реализовать не могу... Выделить код Код:var winWrapper = new XPCNativeWrapper(content, "document", "getSelection()"); var docWrapper = new XPCNativeWrapper(winWrapper.document, "title"); return docWrapper.title == winWrapper.getSelection(); с http://developer.mozilla.org/en/docs/XPCNativeWrapper у меня работает |
Anton > 18-08-2007 13:17:31 |
Наверное, так: Выделить код Код:var winWrapper = new XPCNativeWrapper (content, "document"); var docWrapper = new XPCNativeWrapper (winWrapper. document, "getElementById()"); var siWrapper = new XPCNativeWrapper (docWrapper. getElementById ("search-input"), "value"); var sivWrapper = siWrapper. value; Добавлено Сбт 18 Авг 2007 13:20:26 :
А в более поздних версиях можно короче:
|
Shutnik > 18-08-2007 13:52:54 |
Anton |