действительно ли это возможно для расширения Firefox (панель инструментов) на переменные документа доступа? подробное объяснение следует..
загруженный документ:
<script type="text/javascript">
var variableForExtension = 'something';
</script>
расширение:
var win = window.top.getBrowser().selectedBrowser.contentWindow;
alert(win.variableForExtension); // undefined
это была первая вещь попробовать, и это недоступно этот путь из-за механизмов защиты (XPCNativeWrapper). я считал о доступе к нему канавку wrappedJSObject и события использования (добавляющий слушателя документа и диспетчеризирующий событие от расширения), но никакая удача. не попробовал слишком трудно, все же. таким образом, прежде чем я рою глубже ('метод событий', походит на способ пойти), я хотел бы знать, что это даже возможно?
спасибо
Да, доступа к переменной 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) Если вам нужно позвонить в функцию на контентской веб-странице или запустить свой собственный код в контексте страницы, это более сложно. Просили и ответили и ответили в других местах много раз, но, к сожалению, никогда не было полностью задокументировано. Поскольку это не связано с вашим вопросом, я не буду входу в детали.