MozillaPL.org - polskie centrum Mozilli

Główne menu:

problem ze zmiennymi (javascript, xul i xpcom)

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

Moderator: Pomocy?!

problem ze zmiennymi (javascript, xul i xpcom)

Postautor: gawomontyk » 20 sierpnia 2009, 15:51

Przeglądarka: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.7) Gecko/2009030814 Iceweasel/3.0.12 (Debian-3.0.12-1)

Próbuje napisać rozszerzenie do firefoksa, które posiada dwa przyciski: 1 i 2. Po kliknięciu przycisku nr1 do zmiennej path przypisywany jest adres aktualnie otwartej strony, otwierana jest nowa karta i ustawiana na aktywną. Na nowo otwartej karcie pojawia się przycisk nr2, który, po jego kliknięciu "wpisuje" (innerHTML) w strone zawartość zmiennej path (czyli adres poprzedniej karty).

A teraz problem: przycisk 1 korzysta z funkcji kuku.open() a przycisk 2 z kuku.save(), jednak zmienna zapisana w pierwszej funkcji nie jest dostępna w drugiej.

Kod: Zaznacz cały
var kuku = {

open: function () {
//Przypisuje do zmiennej path adres aktualnej strony
var path=content.location.href;

//Tworze nslFile object
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath(path);

//Przypisuje zawartość pliku do zmiennej typu string
var data = "";
var fstream = Components.classes["@mozilla.org/network/file-input-stream;1"].
                        createInstance(Components.interfaces.nsIFileInputStream);
var cstream = Components.classes["@mozilla.org/intl/converter-input-stream;1"].
                        createInstance(Components.interfaces.nsIConverterInputStream);
fstream.init(file, -1, 0, 0);
cstream.init(fstream, "UTF-8", 0, 0); // you can use another encoding here if you wish

let (str = {}) {
  cstream.readString(-1, str); // read the whole file and put it in str.value
  data = str.value;
}
cstream.close(); // this closes fstream

//Otwieram nową kartę i ustawiam ją na aktywną

var tab=gBrowser.addTab("http://www.google.pl");
var newTabBrowser = gBrowser.getBrowserForTab(tab);
gBrowser.selectedTab=tab;

},


save: function () {
//Zastępuje body nowo-otwartej strony adresem poprzedniej
content.body.innerHTML=path;
}
}


Zawartość pliku xul, gdzie znajdują się definicje położenia przycisków i przypisane funkcje, pominę, bo raczej z tego co tam pisze, to jedyną ważną informacją jest to, że przycisk nr1 korzysta z funkcji kuku.open() a nr2 z kuku.save()

Domyślam się, że problemem jest, że zmienna path jest w każdej z tych metod zmienną lokalną, ale gdy użyje zmiennej globalnej, zdaje mi się, że w przypadku, gdy użytkownik kliknie na jednej stronie na przycisk nr1 i na drugiej stronie w przycisk nr1, no wtedy dwie nowootwarte strony będą posiadały zmienną path o takiej samej wartości, gdyż funkcja wywołana przy kliknięciu przycisku nr1 z drugiej strony, zastąpi adres pierwszej strony w zmiennej path. Mam nadzieje, że zbytnio nie zamieszałem ;)

Ma ktoś jakiś pomysł?
gawomontyk
 
Posty: 1
Z nami od: 20 sierpnia 2009, 15:48

Wróć do Programowanie z użyciem technologii Mozilli

Kto jest online

Zarejestrowani użytkownicy: Bing [Bot], Google [Bot]

Przejdź do powiązanej strony

Nawigacja:

Stopka: