2014-06-06 2 views
0

Firefox 확장 프로그램을 만들었습니다. Firefox 확장 프로그램은 popup.html에 iframe이 있습니다.
iframe과 main.js간에 메시지를 전달하려면 postMessage 메소드를 사용하고 있습니다.Firefox 확장 프로그램이 백그라운드에서 계속 실행 중입니다.

메시지를받을 때 팝업이 이상하게 작동합니다. 받은 메시지를 얻기 위해 console.log를 사용했습니다. 이 메시지는 여러 번 console.log를 얻습니다. 시간 연장이 클릭되었습니다. 예 : 확장 프로그램을 네 번 열어 본 경우 iframe은 메시지를 한 번만 전달하지만 메시지는 네 번 수신됩니다.

는 내가 단계별 프로세스를 쓰고 있어요 이해하기 :

  1. 열고 탭을 확장을 클릭합니다.

  2. 메시지가 iframe에서 main.js로 전달됩니다. 메시지를받은 후 console.log는 동일한 메시지를 전달합니다. 이제이 메시지가 한 번 나타납니다.

  3. 확장 프로그램을 닫으려면 아무 곳이나 클릭하십시오. 확장 프로그램을 다시 클릭하십시오> 메시지가 전달됩니다> console.logs 동일한 메시지를 두 번.

이 과정을 반복하면 메시지가 여러 번 기록되고 확장 프로그램이 클릭됩니다.

Firefox에서이 버그가 있습니까? 아니면 뭔가 잘못하고있는거야? 내가 "을 myApp를 호출하고있어 경우
:
편집 :

if (self.port !== undefined){ 
    self.port.on("show", function(a,b) { 
    myApp.initialize(a,b); 
    }); 
} 

var myApp = { 
    initialize: function (a,b){ 
    window.addEventListener ("message" , receiveMessage, false); 
    function receiveMessage(event){ 
     console.log("event.data - - - - - - ",event.data); 
    } 
    }, 
    goAbc : function(){ 
    self.port.emit("close"); 
    } 
} 
가있는 iframe 코드는

: 수정 됨

$(document).ready(function(){ 
    parent.postMessage("getData", "*"); 
}); 

: 질문 하나 더 여기 내 main.js에서 일부 조각입니다 .goAbc() "코드에서 어딘가에, 그것은 말한다, self.port 정의되지 않습니다. 여기에 무슨 문제가 있니? self.port 대신 다른 것을 사용해야합니까?

+0

최소의 재생산 예 (코드)를 게시하십시오. – nmaier

+0

@nmaier : 코드로 질문을 업데이트했습니다. Pls는 모양을 가지고있다. :) – ignVinayak

+0

새 질문을 올리십시오. 추가 작업에는 편집을 사용하지 마십시오. 그래도 좋은 답변 (또는 답변)을 원한다면 ** 완전한 ** 재현 가능한 예를 게시해야합니다. '창'및/또는 '자기'가 어디서 유래했는지 추측 할 필요가 없습니다. – nmaier

답변

0

"show"을 사용하면 myApp.initialize (addEventListener)으로 새 이벤트 수신기를 호출합니다. 그래서 처음에는 하나가 있습니다. 다음에 다른 하나가 추가 될 것입니다 (다시 addEventListener라고 부름).

"show" 대신 각각 addEventListener을 정확히 한 번 호출해야합니다.

+0

이봐, 고마워. 질문이 하나 더 있습니다. 질문을 다시 편집하고 있습니다. 도와 줘, 나도 그렇게 해. 고마워 :) – ignVinayak

+0

그냥 그것을 업데이트, 좀보고 :) – ignVinayak

관련 문제