prefBranches w JS
Moderator: Pomocy?!
prefBranches w JS
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Czy jest możliwość by wyciągnąć jakąś "opcje użytkownika" danej wtyczki?
Tzn załóżmy, że robię wtyczkę, i w konfiguracji jej (podręczne menu pod PPM) ustawie sobie wartość pola o ID=UnikalnaNazwa153 na 50000.
Czy jest możliwość z poziomu funkcji w JS na stronie wyciągnąć tę wartość?
- Gość
Re: prefBranches w JS
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Anonymous pisze:Witam :)
Czy jest możliwość by wyciągnąć jakąś "opcje użytkownika" danej wtyczki?
Masz na myśli wtyczkę, a nie rozszerzenie, tak?
Tzn załóżmy, że robię wtyczkę, i w konfiguracji jej (podręczne menu pod PPM) ustawie sobie wartość pola o ID=UnikalnaNazwa153 na 50000.
Czy jest możliwość z poziomu funkcji w JS na stronie wyciągnąć tę wartość?
Oczywiście, że nie. Kod działający z uprawnieniami strony nie do tego dostępu, przecież to by była wielka luka w ochronie prywatnych danych.
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Anonymous pisze:A czy zatem da się zrobić tak, by funkcja po stronie HTMLa dawała "sygnał" wtyczce, i by wtyczka wykonywała operacje ?
Wtyczka i rozszerzenie to dwie różne rzeczy. Przykładami wtyczek są Flash, QuickTime, Java i odpowiadają za obsługę elementów osadzonych w znaczniku OBJECT. Wszystkie przeglądarki je obsługują.
Rozszerzenia, to właśnie rozszerzenia do Firefoksa, takie co instalujesz sobie np. z http://addons.mozilla.org
Chodzi tobie o wtyczkę czy o rozszerzenie?
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Funkcja działająca w stronie tworzy i wysyła własne zdarzenie, na przykład:
- Kod: Zaznacz cały
var evt = document.createEvent('Events');
evt.initEvent('MojeZdarzenie', false, false);
element.dispatchEvent(evt);
Zaś kod działający w chrome, czyli w twoje rozszerzenie przechwytuje to zdarzenie przez dodanie nasłuchiwacza zdarzeń do dokumentu strony, koniecznie ustawionego na fazę capture (ostatni parametr true):
- Kod: Zaznacz cały
document.addEventListener('MojeZdarzenie', mojaFunkcja, true);
Zakładam, że orientujesz się w zdarzeniach i ogólnie w DOM. Jeśli nie... to się zapoznaj, bo bez tego w rozszerzeniach ani rusz:
http://developer.mozilla.org/pl/docs/DOM
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Anonymous pisze:Hmm w konsoli dostaje `element is not defined`.
Heh, oczywiście. Powyższy kod pokazuje tylko metodę, nie należy go wklejać dosłownie. |element| to element, z którego wysyłasz zdarzenie - musisz go wcześniej wybrać i odnaleźć. Szczegóły zależą od konkretnej sytuacji.
Podobnie drugi fragment, który podałem. |document|, to dokument zawierający stronę, ale musisz go najpierw odszukać za pomocą metod i własności elementu <tabbrowser/>, który zarządza przeglądaniem w kartach.
Podaję tylko metodę, bo przecież szczegóły się różnią w zależności od konkretnej sytuacji. Dlatego też nie wklejaj tego żywcem, tylko zrozum i zastosuj samodzielnie. Tak, jak powiedziałem, zacznij od nauczenia się DOM.
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
- Kod: Zaznacz cały
<head>
<script type="text/javascript">
function aa()
{
var evt = document.createEvent('Events');
evt.initEvent('MojeZdarzenie', false, false);
var element = document.getElementById("box");
element.dispatchEvent(evt);
}
</script>
</head>
<input type="checkbox" id="box" /><label for="box">Checkbox</label>
<input type="button" onclick="aa();" value="x"/>
i odpowiednio:
- Kod: Zaznacz cały
window.addEventListener('MojeZdarzenie', mojaFunkcja, true);
function mojaFunkcja(event)
{
alert("xxx");
}
Ale nie działa :\
Probowałem zamiast window dać document definując go tak:
- Kod: Zaznacz cały
var document = getBrowser().selectedBrowser.contentDocument;
Ale też żadnych rezulataów...
- Gość
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
- Kod: Zaznacz cały
evt.initEvent('MojeZdarzenie', true, true);
Probowałem zamiast window dać document definując go tak:
- Kod: Zaznacz cały
var document = getBrowser().selectedBrowser.contentDocument;
Tak jest ok, tylko nie nadpisuj nazwy document, wybierz sobie jakąś inną.
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
- Kod: Zaznacz cały
var doc = getBrowser().selectedBrowser.contentDocument;
doc.addEventListener('MojeZdarzenie', mojaFunkcja, true);
function mojaFunkcja(event)
{
alert("xxx");
}
Tak?
Nie działa...
- Gość
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Jeśli nie ma tego przesadnie dużo (powiedzmy do 100 linii ;), to możesz wrzucić całość kodu na http://pastebin.mozilla.org/ i pokazać.
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Anonymous pisze:btw. jak w rozszerzeniu zamiast 'MojaFunkcja' dam 'click' (przy addEventListener) to niby działa, z tymże reaguje na dowolny klik...
Chyba raczej zamiast "MojeZdarzenie"? Tak też można, wystarczy tylko sprawdzić dodatkowo, jaki jest event.target. Wyedytowałem twój kod, żeby pokazać.
Tworzenie i wysyłanie własnego zdarzenia nie jest konieczne, ale jest po prostu bardziej eleganckie. Skoro nie jest ono związane z tym checkboxem, to nie ma powodu, żeby wysyłać je właśnie z tego elementu. Może równie dobrze wysłać je z window
- Kod: Zaznacz cały
window.dispatchEvent(evt);
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
- Kod: Zaznacz cały
var doc = getBrowser().selectedBrowser.contentDocument;
doc.addEventListener('click', mojaFunkcja, true);
function mojaFunkcja(event)
{
if (event.target.id == 'box')
alert("xxx");
}
I nie działa :F
Mówiłeś, że sam pracowałeś na takiej rzeczy często...
Masz może swoje gotowe rozszerzenie, gdzie to wykorzystałeś ?
To podrzuć, i najlepiej odrazu funkcję do tego, to zobacze jak powinno być, ale jest tak jak wsio pisałeś.
Konsola nic nie rzuca.
- Gość
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Anonymous pisze:Zatem mam
- Kod: Zaznacz cały
var doc = getBrowser().selectedBrowser.contentDocument;
doc.addEventListener('click', mojaFunkcja, true);
function mojaFunkcja(event)
{
if (event.target.id == 'box')
alert("xxx");
}
I nie działa :F
BTW, celowo uprościłem na gBrowser.contentDocument, bo to to samo krócej. Niepotrzebnie przywróciłeś starą wersję.
Mówiłeś, że sam pracowałeś na takiej rzeczy często...
Masz może swoje gotowe rozszerzenie, gdzie to wykorzystałeś ?
To podrzuć, i najlepiej odrazu funkcję do tego, to zobacze jak powinno być, ale jest tak jak wsio pisałeś.
Nie używałem tego dokładnie w takiej samej sytuacji, więc i tak nie będziesz mógł tego skopiować słowo w słowo. A najlepsze możliwe przybliżenie już Tobie podałem.
Zresztą to rozszerzenie to kilka tysięcy linii kodu, więc zanim się w tym połapiesz...
Dostaje alert'a tylko wtedy, gdy doc.addEventListener zmienie na window.add..., ale event.target.id jest zawsze content, nigdy box...
W takim razie już wiem, o co chodzi. Dodajesz tego eventListenera w momencie startu aplikacji (a dokładniej, otwarcia danego okna), a więc dodajesz go do ówczesnego dokumentu. Tymczasem po załadowaniu twoje strony dokument się zmienia i stary listener już nie istnieje. Musisz dodać listenera dopiero po załadowaniu strony.
Myślałem, że o to sam już zadbasz, dlatego wcześniej o tym nie wspomniałem. :)
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
- Kod: Zaznacz cały
window.addEventListener('DOMContentLoaded', nowa, true);
function nowa(event)
{
var doc = gBrowser.contentDocument;
doc.addEventListener('click', mojaFunkcja, true);
}
function mojaFunkcja(evemt)
{
alert("test");
}
?
- Gość
Wróć do Programowanie z użyciem technologii Mozilli
Kto jest online
Zarejestrowani użytkownicy: Bing [Bot], Google [Bot]