[SOLVED] Opera ma już Google PageRank, graficzny (via User JS)

w dziale Opera
piotr_konieczny napisał(a):

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?

PragmaInline napisał(a):

@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

piotr_konieczny napisał(a):

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?

PragmaInline napisał(a):

@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

piotr_konieczny napisał(a):

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 ;-)

PragmaInline napisał(a):

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);

piotr_konieczny napisał(a):

smile 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.

symeon napisał(a):

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 bigsmile . odpowiedz mam post wyżej.pozdro

symeon napisał(a):

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ć ?

PragmaInline napisał(a):

@symeon,
można. Podaj tylko adres przykładowej strony, żebym mógł przetestować.
pi

symeon napisał(a):

pierwsza z brzegu ( ładuje od razu obrazek) http://www.recykling.uni.wroc.pl/img/paper/6.jpg

PragmaInline napisał(a):

Ah, rozumiem, po prostu chcesz aby agerank pojawiał się tylko na stronach html, tak?
pi

symeon napisał(a):

dokładnie

piotr_konieczny napisał(a):

#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 ;-)

PragmaInline napisał(a):

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!

symeon napisał(a):

super cheers dzięki bigsmile

pozdro

mkr napisał(a):

Bardzo ciekawe smile Zrobilem sobie do tego własną grafike i bardzo mi pasuje smile Ma ktoś pomysł jak zablokować sprawdzanie dla ramek ?


Jak są chętni to PW dam url do mojego testu

prnaopera.png

PragmaInline napisał(a):

if (!window.parent) {
 document.addEventListener('load', function(ev) {
  ....
 }
}

pi

Zajec napisał(a):

Może ktoś umieścić finalną wersję na http://nontroppo.org/wiki/SkryptyUzytkownika ? smile

PragmaInline napisał(a):

@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

sidtherat napisał(a):

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

mkr napisał(a):

Ok przerobiłem skrypt pod siebie wink Finalna wersja nie wyświetla PR w iframe wink

//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);

d.i.z. napisał(a):

ale to nie do końca działa tak jak powinno: http://nontroppo.org/wiki/Opera

symeon napisał(a):

a mi to wogóle nie działa