Ciekawe pytanie rzeczywiście ..
Właśnie dowiedziałem się poprzez this post na forum MozillaZine prosty sposób do osiągnięcia tego celu. Technika polega głównie na zdefiniowaniu niestandardowego elementu DOM na stronie internetowej, wypełnieniu go pewnymi arbitralnymi atrybutami, a następnie wykorzystaniu go jako celu niestandardowego zdarzenia. Zdarzenie może być następnie przechwycone i użyte do przekazania wartości ze strony do rozszerzenia.
Strona WWW (zakłada jQuery jest dostępny)
kod
<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>
Chrome:
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);
Uwaga, doc.addEventListener ma czwarty parametr, co wskazuje, że będzie akceptować wydarzenia nadchodzi z niezaufanego kodu. Możesz jednak dodać ten detektor zdarzeń selektywnie, aby tylko zaufane strony z Twojej witryny mogły przekazywać wartości do rozszerzenia.
... i rzeczywiście bardzo interesująca odpowiedź. Jestem naprawdę zaintrygowany techniką niestandardowego zdarzenia i słuchacza. Czy uważasz, że byłby to najlepszy sposób dla strony javascript, aby móc "wywoływać" funkcję w rozszerzeniu. na przykład zaimplementować XHR typu XSS w witrynie (w mojej zaufanej aplikacji i domenach). – Cheekysoft
Nie jestem pewien, czy to * najlepszy * sposób, ale wydaje się być wydajny i dość bezpieczny. Właśnie próbowałem zawinąć do słuchacza żądanie XHR do zewnętrznej strony i działało dobrze! –
Jest to zalecana technika, tak:. –
Nickolay