2014-11-05 5 views
4

IP 로컬 화에 따라 아이콘이 변경되는 Google 크롬 확장 프로그램을 개발 중입니다. 확장 아이콘 변경 후 새로 고침 문제가 있습니다.크롬 확장을위한 아이콘 변경 새로 고침

background.js 파일의이 명령 덕분에 실제로 아이콘이 변경되고 있습니다.

chrome.browserAction.setIcon ({ path: 'france.png' }); 

불행히도 setIcon 명령은 비동기 적으로 보입니다. 실제로 아이콘 변경은 코드가 변경된 후 몇 초 후에 나타납니다. 크롬에 아이콘을 새로 고칠 수있는 방법이 있습니까?

많은 크롬 확장이 이것을 제어 할 수있는 것 같지만 어떻게 관리하는지 알 수 없습니다. 더 명확하게 이해하기 위해

, 내가 setIcon 라인을 제외하고, 다른 파일에서 내 모든 javascript 코드를 제거 :


여기에 자세한 내용입니다. 다음은 내 javascript 파일을 선언하는 Manifest 행입니다.

"background": { "scripts": [ "jquery.min.js", "popup.js", "background.js"] }, 

popup.js : 이제 빈 background.js : 만이 두 다음 줄 :

console.log ("I'm background script"); 
chrome.browserAction.setIcon({path: 'france.png'}); 

확장 관리자와 확장 다시로드 후, 나는 그것의 아이콘을 클릭합니다. Chrome에서 정적 인 html 팝업을 표시하고 background.js 파일을로드합니다. 그것을 증명하기 위해 텍스트가 콘솔 창에 즉시 나타납니다.

그러나 크롬으로 변경된 것을 보려면 아이콘 확장에서 몇 번 더 눌러야합니다.

나는 어딘가에서 뭔가 잘못을 저 지르지 만, 실제로 모든 것을 제거 했으므로이 지연이 어디에서 왔는지 전혀 모른다.

+0

나에게 맞는 소리가 들리지 않습니다. 특히 "몇 초"부분. 문제가 다른 곳에 없다고 확신합니까? 코드에 대한 세부 정보를 추가하십시오. – Xan

+0

질문을 코멘트에 추가하는 대신 새로운 정보로 편집하십시오. – Xan

+0

요청한대로 완료합니다. 감사합니다 – Ipunchu

답변

0

즉시 아이콘이 배경 스크립트 모든 관련 webNavigation 이벤트를 처리 업데이트하려면 :

chrome.webNavigation.onCommitted.addListener(updateIcon); 
chrome.webNavigation.onHistoryStateUpdated.addListener(updateIcon); 
chrome.webNavigation.onBeforeNavigate.addListener(updateIcon); 

function updateIcon(details) { 
    if (details.frameId != 0) { 
     return; // only update the icon for main page, not iframe/frame 
    } 
    chrome.browserAction.setIcon({ 
     path: {19: "france-19.png", 38: "france-38.png"}, 
     tabId: details.tabId 
    }); 
} 

귀하의 manifest.json은 물론, webNavigation 권한이 있어야합니다.

관련 문제