Доступ к переменной JavaScript документа от расширения Firefox

действительно ли это возможно для расширения Firefox (панель инструментов) на переменные документа доступа? подробное объяснение следует..

загруженный документ:

<script type="text/javascript">
var variableForExtension = 'something';
</script>

расширение:

var win = window.top.getBrowser().selectedBrowser.contentWindow;
alert(win.variableForExtension); // undefined

это была первая вещь попробовать, и это недоступно этот путь из-за механизмов защиты (XPCNativeWrapper). я считал о доступе к нему канавку wrappedJSObject и события использования (добавляющий слушателя документа и диспетчеризирующий событие от расширения), но никакая удача. не попробовал слишком трудно, все же. таким образом, прежде чем я рою глубже ('метод событий', походит на способ пойти), я хотел бы знать, что это даже возможно?

спасибо

9
задан parserr 20 January 2010 в 17:34
поделиться

1 ответ

Да, доступа к переменной JS в контент есть и всегда было возможно. Делать это наивный путь, не был в безопасности (в том смысле, что злонамеренная веб-страница может получить привилегии Chrome) в более старых версиях Firefox.

1) Если вы управляете веб-страницей и хотите пройти информацию к расширению, вы действительно должны использовать технику . Это сработало и было / безопасно во всех версиях Firefox.

2) Если вы хотите прочитать значение из документа содержимого, вы можете просто обходить XPCnatcyWrapper:

var win = window.top.getBrowser().selectedBrowser.contentWindow;
// By the way, this could just be
//   var win = content;
// or 
//   var win = gBrowser.contentWindow;
alert(win.variableForExtension); // undefined
win.wrappedJSObject.variableForExtension // voila!

Это было небезопасно до Firefox 3. В Firefox 3, а затем все в порядке, вы получаете другой вид обертки ( xpcsafejsobjectwrapper ), который выглядит так же, как объект с страницы контента к вашему коду, но гарантирует, что страница содержимого не сможет сделать что-то злонамеренное.

3) Если вам нужно позвонить в функцию на контентской веб-странице или запустить свой собственный код в контексте страницы, это более сложно. Просили и ответили и ответили в других местах много раз, но, к сожалению, никогда не было полностью задокументировано. Поскольку это не связано с вашим вопросом, я не буду входу в детали.

15
ответ дан 4 December 2019 в 11:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: