MozillaPL.org - polskie centrum Mozilli

Główne menu:

Zapis danych

Projektowanie aplikacji i rozszerzeń opartych na technologiach Mozilla Foundation: XUL, JavaScript, XPCOM, XBL i innych

Moderator: Pomocy?!

Zapis danych

Postautor: i.eos » 09 maja 2007, 13:54

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11

Czy istnieje sposób na to aby rozszerzenie mialo mozliwosc zapisania danych w pliku lub utworzenia pliku. Chodzi o to aby napisac funkcje która po zakończeniu działania na dysku zapisze informację (może być w już istniejącym pliku), ale bez zamykania przeglądarki bo coś takiego można zrobić zapisując dane w preferencjach. Może można jakoś wymusić na Firefoxie zapisanie preferencji bez jej zamykania ?

[Regulamin forum pkt. 4 - przenoszę - moderator]
i.eos
 

Re: Zapis danych

Postautor: Ancestor » 09 maja 2007, 15:11

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3

i.eos pisze:Czy istnieje sposób na to aby rozszerzenie mialo mozliwosc zapisania danych w pliku lub utworzenia pliku.

Służy do tego interfejs nsIFile. Nie wiem, czy jesteś już zaznajomiony z korzystaniem z interfejsów XPCOM (Components.classes["@mozilla/.."] i tak dalej) - jeśli nie, to pytaj.
Chodzi o to aby napisac funkcje która po zakończeniu działania na dysku zapisze informację (może być w już istniejącym pliku), ale bez zamykania przeglądarki bo coś takiego można zrobić zapisując dane w preferencjach. Może można jakoś wymusić na Firefoxie zapisanie preferencji bez jej zamykania ?

Preferencje są zapisywane natychmiastowo, dlaczego sądzisz, że jest inaczej? W jaki sposób je modyfikujesz? nsIPrefService / nsIPrefBranch?
Ancestor
Moderator
 
Posty: 1799
Z nami od: 11 czerwca 2005, 20:25
Lokalizacja: Sopot

Re: Zapis danych

Postautor: eos » 09 maja 2007, 17:05

Przeglądarka: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.8.1.2) Gecko/20061023 SUSE/2.0.0.2-1.1 Firefox/2.0.0.2

Ancestor pisze:Służy do tego interfejs nsIFile. Nie wiem, czy jesteś już zaznajomiony z korzystaniem z interfejsów XPCOM (Components.classes["@mozilla/.."] i tak dalej) - jeśli nie, to pytaj.

Poszukam coś na ten temat.... no chyba że masz jakiś przykład pod ręką :)
Ancestor pisze:Preferencje są zapisywane natychmiastowo, dlaczego sądzisz, że jest inaczej? W jaki sposób je modyfikujesz? nsIPrefService / nsIPrefBranch?

Używam nsIPrefBranch... może popełniam jakiś błąd... zapisuje w taki sposób:
Kod: Zaznacz cały
var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);

var element = document.getElementById("enable");
pref.setBoolPref(element.getAttribute("prefstring"), element.checked);

No i zmiany w pliku "prefs.js" widoczne są dopiero po zamknięciu FF.
eos
 
Posty: 12
Z nami od: 23 kwietnia 2007, 11:25

Re: Zapis danych

Postautor: Ancestor » 09 maja 2007, 19:17

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3

eos pisze:
Ancestor pisze:Służy do tego interfejs nsIFile. Nie wiem, czy jesteś już zaznajomiony z korzystaniem z interfejsów XPCOM (Components.classes["@mozilla/.."] i tak dalej) - jeśli nie, to pytaj.

Poszukam coś na ten temat.... no chyba że masz jakiś przykład pod ręką :)

http://mxr.mozilla.org/mozilla1.8/sourc ... sIFile.idl

Wszystkie interfejsy są zdefiniowane w plikach .idl, wystarczy więc je odnaleźć w kodzie źródłowym Mozilli.

Używam nsIPrefBranch... może popełniam jakiś błąd... zapisuje w taki sposób:
Kod: Zaznacz cały
var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);

var element = document.getElementById("enable");
pref.setBoolPref(element.getAttribute("prefstring"), element.checked);

No i zmiany w pliku "prefs.js" widoczne są dopiero po zamknięciu FF.

Zgadza się, ale w pamięci są już trzymane nowe wartości i podczas odczytywania danego ustawienia, otrzymasz aktualną wartość. prefs.js ciebie w tym momencie nie obchodzi.

BTW, czy powyższy kod pochodzi z okna opcji rozszerzenia? Jeśli tak, to robi się to inaczej (znacznie prościej).
Ancestor
Moderator
 
Posty: 1799
Z nami od: 11 czerwca 2005, 20:25
Lokalizacja: Sopot

Re: Zapis danych

Postautor: eos » 10 maja 2007, 11:29

Przeglądarka: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.8.1.2) Gecko/20061023 SUSE/2.0.0.2-1.1 Firefox/2.0.0.2

Ancestor pisze:Zgadza się, ale w pamięci są już trzymane nowe wartości i podczas odczytywania danego ustawienia, otrzymasz aktualną wartość. prefs.js ciebie w tym momencie nie obchodzi.

Potrzebuje poinformować przy pomocy rozszerzenia skrypt który jest w pythonie i działa na serwerze jako deamon. Najprościej by było aby rozszerzenie tworzyło plik (lub katalog :)) a skrypt by sobie to sprawdzał.
Ancestor pisze:BTW, czy powyższy kod pochodzi z okna opcji rozszerzenia? Jeśli tak, to robi się to inaczej (znacznie prościej).

Rozumie, narazie jednak potrzebowałem aby to działało... później zajme się optymizacją. Narazie interesuje mnie informowanie deamona przez rozszerzenie :-)
eos
 
Posty: 12
Z nami od: 23 kwietnia 2007, 11:25

Postautor: eos » 10 maja 2007, 12:43

Przeglądarka: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.8.1.2) Gecko/20061023 SUSE/2.0.0.2-1.1 Firefox/2.0.0.2

ok mam coś takiego:
Kod: Zaznacz cały
var ExportFile = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("TmpD", Components.interfaces.nsIFile);

ExportFile.append("plik.txt");

ExportFile.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);


Tworzy plik.txt w katalogu tymczasowym :D
eos
 
Posty: 12
Z nami od: 23 kwietnia 2007, 11:25

zapisywanie bierzacej strony

Postautor: silek » 06 marca 2008, 00:56

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12

Chyba to jest najbardziej odpowiedni temat do umieszczenia mojego problemu.

Problem może nie jest zbyt skomplikowany, ale nigdzie nie mogę znaleźć jego rozwiązania:(

Chcę zapisać aktualnie oglądaną stronę do pliku, po wciśnięciu przycisku. Rozszerzenie zrobiłem, zapisywanie jakichś danych działa. Jest tylko jeden mały problem nie potrafię zapisać kodu aktualnie oglądanej strony do pliku. Tzn. nie wiem skąd go wziąć? Próbowałem na setki sposobów z obiektu: "document", ale nic nie wychodziło. Nie wiem czy mam się odwoływać po kolei do elementów obiektu document. Wydaje mi się, że jest jakichś prostszy sposób wykonania tego, ale nie mogę nic znaleźć.

Takie pytanko. Może można skorzystać z jakiegoś API Firefox-a, bo przecież firefox sam w sobie umożliwia zapisywanie aktualnie oglądanej strony, wiec czy nie można by z tego skorzystać? W sumie od niedawna zajmuję się "programowaniem" pod firefox-em i mam tylko ogólny pogląd, ale czy coś takiego jest możliwe?
silek
 

Postautor: silek » 08 marca 2008, 20:42

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12

Ok znalazłem, tyle, że zrobiłem to w inny sposób, a można było tak:

var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("C:\\filename.html");
var wbp = Components.classes['@mozilla.org/embedding/browser/nsWebBrowserPersist;1']
.createInstance(Components.interfaces.nsIWebBrowserPersist);
wbp.saveDocument(content.document, file, null, null, null, null);
silek
 


Wróć do Programowanie z użyciem technologii Mozilli

Kto jest online

Zarejestrowani użytkownicy: Bing [Bot], dexter

Przejdź do powiązanej strony

Nawigacja:

Stopka: