내 Firefox 확장 기능은 웹 사이트에서 애드온 기능에 액세스하는 데 사용할 수있는 JavaScript 기능을 제공합니다. 웹 사이트는이 함수를 호출하고 두 가지 콜백을 제공합니다.Firefox 확장 기능 (SDK)의 콘텐츠 스크립트가 이벤트 리스너를 추가합니다.
웹 사이트 코드 :
function onButtonClick() {
var callbackSuccess = function() { alert("Yeah!"); };
var callbackError = function() { alert("Oh no!"); };
if (window.magicAddon) { // Check if my addon is installed
magicAddon.doStuff(callbackSuccess, callbackError);
}
}
내용 스크립트 : 첫 번째 전화에서 잘 작동하지만, 다음에 웹 사이트가 doStuff을 (호출
unsafeWindow.magicAddon = {
doStuff: function(callbackSuccess, callbackError) {
// Bind the two callbacks to events. The addon will fire one of them
self.port.on("doStuffSuccess", callbackSuccess);
self.port.on("doStuffError", callbackError);
// Fire the event that lets the addon do stuff
self.port.emit("doStuff");
}
};
), 새로운 청취자가 추가 up과 alert()가 두 번 실행됩니다. 다음 번에는 세 번의 경고가 있습니다.
청중들이 어떻게 합쳐지는 것을 우아하게 피할 수 있을지 아십니까? 이벤트 유형을 완전히 지울 수 있습니까?
지금까지 일을하지 무엇 : 다시 화재 클리어, 다른 하나는 유지하고, 다음과 함께 추가 오직 하나 내가 두 콜백 이벤트를 가지고 있기 때문에
- 대신
self.port.once(..)
사용. - 새 콜렉션을 등록하기 전에 이전 콜백 참조가 없기 때문에 이전 콜렉션을
self.port.removeListener
으로 제거하십시오.
문제는 그가 한 콜백 리스너를 사용하기 때문에 self.port.once(..)
를 사용할 수있는 것만, How to remove an event listener?과 비슷한 것 같다.
예,'unsafeWindow'는 안전하지 않고 http://bit.ly/rJbtA2를 읽었지만'document.body.appendChild (script)'는 나에게 훨씬 나아 보이지 않습니다 ... – Hannobo