2012-10-18 2 views
0

썬더 버드 용 애드온을 수정 중이며 자바 스크립트 파일 중 하나에 애드온 경로가 하드 코드되어 있습니다. 이것은 나에게보기 흉한 것처럼 보였고 프로그램 방식으로이 경로를 찾아내는 것이 가능해야한다고 생각했습니다. 그러나, 많은 googeling 후, 나는 아직도 그 질문에 대한 답변을 찾을 수 없습니다.Thunderbird API에서 addon 폴더 경로를 찾으십시오

썬더 버드 애드온의 폴더 (install.rdf 포함)에 대한 경로를 어떻게 알 수 있습니까?

답변

2

당신은에 대한 AddonManager API를 사용할 수 있습니다

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

AddonManager.getAddonByID("[email protected]", function(addon) 
{ 
    var uri = addon.getResourceURI("install.rdf"); 
    if (uri instanceof Components.interfaces.nsIFileURL) 
    { 
    var file = uri.file; 
    alert(file.parent.path); 
    } 
}); 
참고로

: Addon, nsIFileURL, nsIFile.

위 코드의 가정은 설치시 확장명의 압축이 풀린 것입니다. 이전 버전은 <em:unpack>true</em:unpack>에서 install.rdf까지 추가했을 것입니다. 일반적으로이 플래그는 지정되어서는 안되며, 디스크에 압축 된 확장자는 성능 향상을 위해 남겨 둡니다. 당신은 단순히 확장에서 파일을 읽을 필요가 있다면 당신이 디스크의 실제 파일입니다 필요없이 그것에 대해 XMLHttpRequest를 사용할 수 있습니다

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

AddonManager.getAddonByID("[email protected]", function(addon) 
{ 
    var uri = addon.getResourceURI("example.txt"); 
    var request = new XMLHttpRequest("GET", uri.spec); 
    request.addEventListener("load", function() 
    { 
    alert(request.responseText); 
    }, false); 
    request.send(); 
}); 
+0

브릴리언트, 감사합니다! – janoliver

+0

하지만 한 가지 : 파이썬 스크립트를 실행해야하므로 코드의 두 번째 부분이 실제로 제대로 작동하지 않습니다. 하지만 여전히 시작일뿐입니다. 다시 한번 감사드립니다. – janoliver

+0

@janoliver : 예, 코드를 실행하려면 확장명을 풀거나 파이썬 스크립트를 임시 디렉토리에 먼저 복사해야합니다. –

관련 문제