2011-10-11 9 views
7

Ho lavorato allo sviluppo di componenti aggiuntivi di Mozilla in passato (livello principianti). Ma nell'incontrare XPCOM, mi sono davvero spaventato e l'ho lasciato nel mezzo.Utilizzo di componenti XPCOM dall'SDK addizionale di Mozilla

Recentemente ho riscontrato solo l'add-on SDK e l'ho trovato davvero interessante, ed è stato davvero affascinante vedere che il lavoro svolto mesi prima non era più di 2 giorni di lavoro con l'SDK. Ora di nuovo sono colpito sul modulo XPCOM.

Ora voglio davvero sfruttare la potenza di XPCOM ma sto lavorando a una scadenza e mi ci vorrà almeno una settimana per familiarizzare con XPCOM nel contesto dell'SDK. Così mi chiedevo se qualcuno mi può aiutare con il codice sorgente delle funzionalità che desidero ...

  1. Per ogni sessione utente, voglio registrare qualcosa. Sono in grado di differenziare le sessioni. Quello che voglio ora è il codice per creare un file nella macchina dell'utente, aprirlo dal componente aggiuntivo e scrivere qualcosa su di esso.

  2. Codice per accedere ai segnalibri e ai download e per leggerli.

Sarebbe davvero un momento da spezzare se dovessi tornare da SDK. Quindi, gentile aiuto.

(io davvero non ho abbastanza rispetto per mettere Bounty su di esso, ma vorrei seriamente apprezzare l'aiuto.)

+0

Come hai fatto a ottenere il _hello world_ lavoro? Ti dispiacerebbe condividere alcuni riferimenti con me? Quello che ottengo sempre è 'Cc ['my contract id'] non è definito. Potresti ricevere un rappresentante se rispondi gentilmente [qui] (http://stackoverflow.com/questions/8477794/firefox-xpcom-hello-world-typeerror-cc-is-undefined). –

risposta

7

Il chrome package ti dà accesso completo XPCOM. Per l'accesso ai file, è meglio utilizzare il FileUtils module:

var {Cc, Ci, Cu} = require("chrome"); 
var {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm"); 
var file = FileUtils.getFile("ProfD", ["mylogfile.txt"]); 
var stream = FileUtils.openFileOutputStream(...); 
stream.write(data, data.length); 
stream.close(); 

La sintassi un po 'insolita per importare il modulo è dovuta alla bug 683217. Notare che FileUtils.openFileOutputStream() è disponibile solo a partire da Firefox 7 e FileUtils.openSafeFileOutputStream() non è utilizzabile se si desidera accodare un file.

Per l'accesso segnalibro si utilizza il solito code snippets, a partire da:

var bmsvc = Cc["@mozilla.org/browser/nav-bookmarks-service;1"] 
       .getService(Ci.nsINavBookmarksService); 
+0

Ricevo questa eccezione durante l'esecuzione del codice. ** TypeError: FileUtils.getFile non è una funzione ** Richiede altro da includere nella struttura di directory del componente aggiuntivo? Ho semplicemente copiato il codice con ** la variabile ** file passata alla funzione ** openFileOutputStream **. – Shatu

+0

@Shatu: Mi spiace, il mio male - così tanto sulla pubblicazione del codice senza testarlo. 'Cu.import()' non restituisce l'oggetto 'FileUtils' ma piuttosto un oggetto con' FileUtils' come proprietà. Risolto il mio codice nella risposta, anche i parametri di 'FileUtils.getFile()'. –

Problemi correlati