2012-04-09 3 views
2

브라우저 시작시 실행해야하는 번들 실행 파일이있는 Firefox 확장 프로그램을 개발합니다.Firefox 확장 프로그램에서 상대 경로 사용

프로세스를 실행하려면 실행 파일을 가리키는 nsIFile 또는 nsILocalFile 인스턴스를 가져와야합니다. 나는 하나의 솔루션으로 어떻게 사용하려면 디렉터리 서비스 알고

var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile); 
file.append("extensions"); 
file.append("<extension id>"); 
file.append("<relative path>"); 

을하지만이 솔루션은 두 가지 단점이 있습니다 대신에 설치된 확장의 내가있을 때

  1. 그것은, 개발 모드에서 작동하지 않습니다 실제 확장 경로가있는 텍스트 파일 만

  2. 경로의 하드 코드 된 "확장명"부분 때문에 작동하지 않을지 확실하지 않습니다.

Firefox 확장 기능과 함께 제공되는 실행 파일을 실행할 수있는 더 좋은 방법이 있습니까?

감사합니다.

답변

3

Firefox 프로필의 디렉토리 구조에 대해 너무 많은 가정을하고 있습니다. Add-on Manager API을 사용하면 확장 프로그램 내에서 파일 경로를 가져올 수 있으므로 사용해야합니다.

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

AddonManager.getAddonByID("<extension id>", function(addon) 
{ 
    var uri = addon.getResourceURI("<relative path>"); 
    var file = uri.QueryInterface(Components.interfaces.nsIFileURL).file; 
    ... 
}); 
2

재시작없는 애드온의 startup 기능 (bootstrap.js 파일에서)은 첫 번째 매개 변수로 애드온이 설치된 경로를 수신합니다. 그런 다음 .jar 파일이있는 경우 파일을 읽는 다양한 방법을 사용할 수 있습니다 (예 : https://github.com/protz/GMail-Conversation-View/blob/master/bootstrap.js#L55 참조).

재시작 할 필요가없는 경우, 나는별로 생각이 없다고 고백해야합니다. :).

관련 문제