Het moet niet te makkelijk zijn anders kan iedereen developper worden

.
Maar om even te illustreren wat ik bedoel.. ik heb nu een extension waarbij ik dus moet weten in welke directory de extension zich bevind. Nu heb ik dat al in mijn extension maar ik had nog even de documentatie nodig over hoe het precies werkt en dat is er nu niet meer. Het simpele antwoord geef ik aan het eind wel even, maar nu volg ik precies de instructie welke op mdc staan om de extension directory te krijgen:
De MOEILIJKE methode van mdc
http://developer.mozilla.org/en/docs/Code_snippets:File_I/O
Getting your extension's folder
bladieblablalba
code:
1
2
3
| var componentFile = __LOCATION__;
var componentsDir = componentFile.parent;
var extensionDir = componentsDir.parent; |
resultaat:
code:
1
| Error: __LOCATION__ is not defined |
Nou dacht ik, dat is vreem, dan eens even verder kijken naar die __LOCATION__.
http://developer.mozilla...._the_Mozilla_Build_System
The trick to accessing your data files is to figure out where the home directory of your extension is. Rumor has it that at some future date, this will possible through the nsIExtensionManager interface or something similar. In the meantime, there is a simple and reliable hack that can be used to achieve this. In the implementation of any JavaScript XPCOM component, there is a special __LOCATION__ (two leading and two trailing underscores) symbol that points to the component’s implementation file. So you can write a simple component which deduces the root directory of your extensions by extrapolating from its location.
This article explains how to create an XPCOM component in JavaScript. You’ll need an IDL file for an interface that looks something like this:
code:
1
2
3
4
| interface myILocation : nsISupports
{
readonly attribute nsIFile locationFile;
}; |
Place the IDL file in the public/ directory of your project or subproject. In the src/ directory, place the JavaScript file that implements the component. The component implementation will include the methods for retrieving the path or file for the extension’s home directory:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| myLocation.prototype =
{
QueryInterface: function(iid)
{
if (iid.equals(nsISupports))
return this;
if (iid.equals(myILocation))
return this;
Components.returnCode = Components.results.NS_ERROR_NO_INTERFACE;
return null;
},
get locationFile()
{
return __LOCATION__.parent.parent;
}
} |
Nou geef ik eerlijk toe dat ik niet precies begrijp wat die __LOCATION__ nou precies doet, maar het enige wat ik wil doen is de directory van de extension krijgen, en dat lijkt mij persoonlijk dit net wat teveel van het goede. Ik zou het wel werkend kunnen krijgen als ik het nodig had, maar dit zou niet zo omslachtig moeten zijn. Dan moet je ook nog bedenken dat dit alleen nog maar is om de dir van de extension te vinden, als je ideeen nog exotischer zijn, dan IS er niet eens een voorbeeld te vinden.
De MAKKELIJKE methode
Zoals beloof nu even de iets makkelijkere oplossing maar helaas is er geen documentatie meer te vinden van nsIExtensionManager

. Dit is eigenlijk maar 1 regel maar vanwege die belachlijke manier van functies aanroepen in firefox ziet het er een ingewikkeld uit.
code:
1
2
3
4
| baseDir = Components.classes["@mozilla.org/extensions/manager;1"]
.getService(Components.interfaces.nsIExtensionManager)
.getInstallLocation(pluginId)
.getItemLocation(pluginId); |
PS ik vraag me af waarom ze dit voorbeeld niet geven en de voorkeur hebben gegeven aan die IDL troep, maar zoals vaker lijkt het soms alsof de firefox developpers een lijntje teveel op hadden toen ze bezig waren

. Als ze ook maar beetje zouden denken aan de plugin developers hadden ze wel iets gemaakt als:
code:
1
| dir = System.getExtensionDir(pluginId); |
[
Voor 3% gewijzigd door
Verwijderd op 11-05-2008 11:43
]