0

현재 내 배경과 내 컨텐츠 스크립트와의 통신에 문제가 있습니다. 문제는 통신 할 수 있지만 비동기식 인 것 같습니다.백그라운드와 내용 스크립트간에 메시지를 동기화하는 방법은 무엇입니까?

내 코드를 보여 드리겠습니다.

yourToolbar.js

chrome.extension.sendRequest({getStatut : "none"}, function(response) 
{ 
    console.log('yourToolbar : ' + response.statut); 
    localStorage['activated'] = response.statut; 
}); 

if (localStorage['activated'] == "show") 
{ 
     // injection 
} 

background.js

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) 
{ 
    if(request.getStatut) 
    { 
     console.log('Background : ' + localStorage['activated']); 
     sendResponse({statut : localStorage['activated']}); 
    } 
    else if(request.modifyToolbar) 
{ 
    if (request.modifyToolbar == "hideToolbar") 
    { 
     localStorage['activated'] = "hide"; 
    }  
} 
}); 

진짜 문제는 내가 도구 모음 만 사라지는 하나 더 새로 고친 후 도구 모음을 숨길 때. 그래서 의사 소통이 최신 상태가 아닌 것 같습니다. 콘솔에 "정품 인증"값을 표시하면 좋은 가치를 보여 주지만, yourtoolbar.js의 조건은 "정품 인증"이전 값을 테스트합니다

누군가가 아이디어를 가지고 있습니까?

편집 : 하나 이상은 ... 난 그냥 조건 전에 경고를 추가하는 경우가 완벽하게 작동한다는 것입니다, 생각

alert(ocalStorage['activated']); 
     if (ocalStorage['activated']== "show") 
     { 

답변

1

크롬과 모든 API 메소드의 모든 메시징 비동기 (?).

chrome.extension.sendRequest({getStatut : "none"}, function(response) 
{ 
    console.log('yourToolbar : ' + response.statut); 
    localStorage['activated'] = response.statut; 

    //inside a callback 
    if (localStorage['activated'] == "show") 
    { 
      // injection 
    } 
}); 
+0

확인 감사합니다 :

그래서 당신의 toolbar.js처럼 보일 것입니다! 그래서 더 이상 해결책이 없습니까? 스레드와 같이 일종의 wait_cond를 만들 수 없습니까? – Sindar

+1

@Sindar 상자에서 꺼내지 마십시오. 콜백을 사용하는 것은 그렇게 나쁜 것은 아니며 프로그램 워크 플로를 변경해야합니다. – serg

관련 문제