Chcialbym, żeby na każdej wyświetlanej stronie, w lewym górnym rogu pojawiał się tekst FOOBAR.
Do swojego katalogu UserJS wrzucilem plik z zawartoscią:
#v+
document.write('<div style="position: absolute; left: 0 px; top: 0 px;">FOOBAR</div>');
#v-
I swietnie, tekst sie pokazuje, ale "przyslania" cala strone, bo ow strona sie nie laduje ;-)
Czy ktos ma pomysl, jak zmodyfikowac powyzszy kod, zeby pojawial sie tylko FOOBAR na isniejacej (kazdej) stronie? (innerHTML?)
Innymi slowy, jak za pomoca UserJS wstrzyknac jakis kod dla kazdej strony.
PS: A moze sprawe rozwiazaloby jakiej ustawienie, powodujace ladowanie mojego skryptu PO ZALADOWANIU STRONY -- czy to mozliwe?
@piotr_konieczny,
być może przyda się taki skrypt.
document.addEventListener('load', function(ev) { var body = document.getElementsByTagName('body')[0] ; var div = document.createElement ('div') ; div.appendChild (document.createTextNode ('foobar')) ; div.style.position = 'absolute' ; div.style.top = '0' ; div.style.left = '0' ; div.style.height = '100px' ; div.style.width = '100px' ; div.style.backgroundColor = 'white' ; body.appendChild (div) ; }, false);
Generalnie, każdy skrypt umieszczony w katalogu userjs jest uruchamiany na każdej stronie.
pi
Dzięki. Właśnie googlając za innerHTML doszedłem do appendChild i próbowałem za jego pomocą coś do body wrzucić -- ale przyznam szczerze, że nie szło mi to za dobrze.
Twój skrypt robi dokładnie to co chciałem... problem w tym, że przy jego użyciu, jeśli np. na stronie znajdują się reklamy Google AdSense, czy inne podpinane skrypty (nie bedące obrazkami), to i w tych miejscach pojawia się box z foobarem :/
Troche uciążliwe byłoby dodawanie @exclude URL_ADSENSE na górze.
Czy można zatem ograniczyć wykonywanie skryptu UserJS tylko głównego "okna" przegladarki?
@piotr_konieczny,
może po prostu napisz jaki specyficzny efekt chcesz uzyskać, bo nie bardzo rozumiem, jaki masz problem. Do blokowania GoogleAdsense lepiej wykorzystać UserCSS.
pi
Chce, za pomocą UserJS i skryptu ze strony http://www.singerdesign.com/page-rank-tool.php
zrobić PageRank indicator, ale tak, żeby pokazywany był dla danej strony po jej załadowaniu, właśnie w formie diva (zawierającego skrypt) o ustalonej pozycji w lewym gornym rogu.
W domysle ma to byc workaround dla ciaglego klikania w przycisk PageRank -- lepsze, dlatego, ze automatycznie "samo" się pokaże i to w graficznej formie.
Sprawy ochrony prywatnosci technologii PageRank pomijam ;-)
Proszę bardzo, oto skrypt. Obrazek jest na tyle mały, że chyba nie będzie zasłaniał googleadsense.
document.addEventListener('load', function(ev) { var body = document.getElementsByTagName('body')[0] ; var div = document.createElement ('div') ; div.style.position = 'absolute' ; div.style.top = '0' ; div.style.left = '0' ; var img = document.createElement ('img') ; img.src = 'http://www.singerdesign.com/pagerank.php?type=small&url=' + location.href ; img.alt = "Google Page Rank Checker" ; div.appendChild (img) ; body.appendChild (div) ; }, false);
Wielkie dzięki!
Poniżej załączam Twój kod z lekką modyfikacją.
1. Umieściłem diva w prawym dolnym rogu, za pomocą fixed. (Teraz nie rzuca się tak w oczy, i estetyczniej wygląda)
2. Dodałem identyfikację (id=pr) i zdarzenie onclick, powodujące, po kliknięciu w niego "zniknięcie" (visibility=hidden) diva (na wypadek, gdyby czasem przeszkadzał).
3. "Zniknięcie" realizuje funkcja switchVis();
I uwaga dla googlających po "Opera PageRank":
Poniższy kod należy wkleić do nowego pliku, nazwać go jakkolwiek, a następnie umieścić w swoim katalogu UserJS (patrz: Narzedzia -> Preferencje -> Zaawansowane -> Zawartość -> JavaScript)
function switchVis(el) { document.getElementById(el).style.visibility="hidden"; } document.addEventListener('load', function(ev) { var body = document.getElementsByTagName('body')[0] ; var div = document.createElement ('div') ; div.style.position = 'fixed' ; div.style.right = '0' ; div.style.bottom = '0' ; div.id = 'pr'; div.onclick = "switchVis('pr')"; var img = document.createElement ('img') ; img.src = 'http://www.singerdesign.com/pagerank.php?type=small&url=' + location.href ; div.appendChild (img) ; body.appendChild (div) ; }, false);
Kod wykorzystuje skrypt ze strony http://www.singerdesign.com/page-rank-tool.php
PS: W przyszłości, można wykorzystać skrypt w perlu (mam gotowy), który via CGI będzie zwracał tylko i wyłącznie cyfrę symbolizującą PageRank. I w zależności od widzimisie użytkownika, będzie on mógł z tą cyfrą zrobić cokolwiek -- w końcu jest małoinwazyjna i gotowa do sparsowania.
Jesli ktoś chciałby pohostować (czyt. udostępnić innym) ten skrypt perlowski i posiada możliwośc wykonywania CGI, to zapraszam na prv.
a dało by się aby ten obrazek był w dolnym lewym rogu ? w górnym prawym mam inne narzędzie (do chowania flashu).
EDIT: ale mi zeszło w napisaniu tego posta . odpowiedz mam post wyżej.pozdro
Otwórzcie sobie jakiś obrazek. w miejscu gdzie na stronie znajduje sie PageRank pojawia się ten obrazek + oczywiście prawidłowo wyświetlany obrazek.
można to zlikwidować ?
@symeon,
można. Podaj tylko adres przykładowej strony, żebym mógł przetestować.
pi
pierwsza z brzegu ( ładuje od razu obrazek) http://www.recykling.uni.wroc.pl/img/paper/6.jpg
Ah, rozumiem, po prostu chcesz aby agerank pojawiał się tylko na stronach html, tak?
pi
dokładnie
#v+ Paweł Ciupak:
W takim razie obejściem może być następujący fragment kodu na początku funkcji 'function(ev)':
if (window.location.href.match(/\.(jpg|jpeg|gif|png)$/)) return;
#v-
Nie testowalem czy działa, bo właśnie wsiadłem do pociągu ;-)
function switchVis(el) { document.getElementById(el).style.visibility="hidden"; } document.addEventListener('load', function(ev) { if (window.location.href.match(/^.*\.(jpe?g|bmp|gif|png)$/i)) { return false ; } var body = document.getElementsByTagName('body')[0] ; var div = document.createElement ('div') ; div.style.position = 'fixed' ; div.style.right = '0' ; div.style.bottom = '0' ; div.id = 'pr'; div.onclick = "switchVis('pr')"; var img = document.createElement ('img') ; img.src = 'http://www.singerdesign.com/pagerank.php?type=small&url=' + location.href ; div.appendChild (img) ; body.appendChild (div) ; }, false);
pi
Edit: @piotr_konieczny - dokładnie tak!
super dzięki
pozdro
Bardzo ciekawe Zrobilem sobie do tego własną grafike i bardzo mi pasuje Ma ktoś pomysł jak zablokować sprawdzanie dla ramek ?
Jak są chętni to PW dam url do mojego testu
prnaopera.png
if (!window.parent) { document.addEventListener('load', function(ev) { .... } }
pi
Może ktoś umieścić finalną wersję na http://nontroppo.org/wiki/SkryptyUzytkownika ?
@Zajec,
nie wiem czy to byłoby właściwe, ponieważ skrypt odnosi się do programu napisanego przez kogoś innego. Trzeba by zapytać autora skryptu który generuje PageRank, i dopiero wtedy mozna pomyśleć o rozpowszechnianiu.
pi
bardzo mocno sugeruje zrobienie z tego tez wersji bookmarkletowej - pobieranie tych danych z zewnetrznego serwera, czesto w ilosciach astronomicznych skonczy sie tym, ze osoba udostepniajaca zamknie dostep. ja przerobilem to sobie na wersje dostepna z menu, odpalajaca sie tylko na stronie na ktorej jest mi potrzebne i uwazam, ze jest to lepsze dla obu stron rozwiazanie.
efekt 'taki jak w firefoxie' jest zludny, albowiem wydaje mi sie, ze firefox oblicza pr lokalnie i nie zjada komus i transferu i mocy proca
ps. fajny skrypt
Ok przerobiłem skrypt pod siebie Finalna wersja nie wyświetla PR w iframe
//Funkcja powodujaca znikniecie paska PageRank po kliknieciu w niego function switchVis(elem) { document.getElementById(elem).style.visibility="hidden"; } //Funkcja odpowiedzialna za wyswietlenie PageRank document.addEventListener('load', function(ev) { if (window.location.href.match(/^.*\.(jpe?g|bmp|gif|png)$/i)) { return false ; } if (parent.frames.length == 0){ return false ; } var body = document.getElementsByTagName('body')[0] ; var div = document.createElement ('div') ; var img = document.createElement ('img') ; img.src = 'http://www.singerdesign.com/pagerank.php?type=small&url=' + location.href ; div.style.position = 'fixed' ; div.style.right = '0' ; div.style.bottom = '0' ; div.id = 'pr'; div.onclick = "switchVis('pr')"; div.appendChild (img) ; body.appendChild (div) ; }, false);
ale to nie do końca działa tak jak powinno: http://nontroppo.org/wiki/Opera
a mi to wogóle nie działa