Доступ к переменной javascript документа из расширения firefox

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

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

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

3 ответов


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

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

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

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) Если вам нужно вызвать функцию в веб-страницы или запускать свой код в контексте страницы, это сложнее. Он много раз спрашивали и отвечали в другом месте, но, к сожалению, никогда не документировали полностью. Поскольку это не связано с вашим вопросом, я не буду вдаваться в подробности.


не так тяжело :)

в расширение:

var jso=window.content.document.defaultView.wrappedJSObject;

теперь вы можете получить доступ к любой функции или глобальной переменной в страницу с расширением:

alert(jso.pagevar);

jso.pagefunction("hey");

Если вы работаете с новыми SDK высокого уровня, то доступ к переменной через скрипты контент - это немного другое. Вы не можете получить доступ к объектам JavaScript непосредственно из кода добавления, но вы можете получить доступ к ним из сценариев содержимого, которые были прикреплены к открытой странице через unsafeWindow