Действительно интересный вопрос ..
Я только что узнал в этом посте на форуме MozillaZine, что это простой способ сделать это. Техника в основном заключается в определении пользовательского элемента DOM на веб-странице, заполнении его произвольными атрибутами и последующем использовании в качестве цели пользовательского события. Событие может быть захвачено и использовано для передачи значений с веб-страницы в расширение.
Веб-страница (предполагается, что jquery доступен)
<script type="text/javascript">
$(document).ready(function(){
$.get("http://mywebsite.net/ajax.php",function(data){
//[...]process data
//define a custom element and append it to the document
var element = document.createElement("MyExtensionDataElement");
element.setAttribute("application_state", "ready");
document.documentElement.appendChild(element);
//create a custom event and dispatch it
// using the custom element as its target
var ev = document.createEvent("Events");
ev.initEvent("MyExtensionEvent", true, false);
element.dispatchEvent(ev);
});
});
</script>
Код хрома:
function myListener(e) {
alert("data:" + e.target.getAttribute("application_state"));
}
function on_specialpage_load(event) {
if (event.originalTarget instanceof HTMLDocument &&
event.originalTarget.location.href == "http://mywebsite.net/myspecialpage.html") {
var doc=event.originalTarget;
doc.addEventListener("MyExtensionEvent", myListener, false, true);
}
}
gBrowser.addEventListener("DOMContentLoaded",on_specialpage_load,false);
Обратите внимание, что doc.addEventListener имеет четвертый параметр, указывающий, что он будет принимать события, поступающие из ненадежного кода. Однако вы можете выборочно добавлять этот прослушиватель событий, чтобы только доверенные страницы вашего сайта могли передавать значения в расширение.