2011-06-10 2 views
2

Firefox에서 내 확장 프로그램의 디렉토리를 가져오고 싶습니다.Firefox에 코드 모듈이 있는지 확인하십시오.

파이어 폭스 3에서 그것은 다음과 같이 작동

var file = Components.classes["@mozilla.org/extensions/manager;1"] 
    .getService(Components.interfaces.nsIExtensionManager) 
    .getInstallLocation("{my guid}"); 

파이어 폭스 4에서는이 같은 새로운 부가 기능 관리자를 사용해야합니다

Components.utils.import("resource://gre/modules/AddonManager.jsm"); 

AddonManager.getAddonByID("{my guid}", function(addon) { 
    addon.getResourceURL("file name")); 
}); 

내 확장 모두 호환되고 싶어하기 때문에 Firefox 3.x 및 Firefox 4.x 이상인 경우 AddonManager.jsm을 사용할 수 있는지 어떻게 확인할 수 있습니까?

+1

파이어 폭스 3에서는'Application.extensions.get (guid) .version' 만하면됩니다.'Application.extensions'가 정의되어 있는지 확인하면 좋은 방법입니다. – MatrixFrog

+0

하지만 정의되어 있는지 어떻게 확인할 수 있습니까? –

+1

undefined는 falsy 값이므로 if (Application.extensions) {/ * Firefox 3.6 * /} 코드 else {/ * Firefox 4 * /} 코드' – MatrixFrog

답변

2

한 가지 방법은

if (Application.extensions) { 
    // code for Firefox 3.6 
} else { 
    // code for Firefox 4+ 
} 

을 할 수 있지만 파이어 폭스 4 API가 비동기와 파이어 폭스 3 API 동기이기 때문에 그것은 좀 이상해.

+4

비동기/동기 차이를 줄이려면 FF4에 대한 비동기 완료를위한 처리기를 정의하고 FF3 코드 끝 부분에 명시 적으로 처리기를 호출하면됩니다. – Dancrumb

관련 문제