🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.javascript
2 messages
2 total messages Started by __Maciek Tue, 19 Aug 2014 15:36
Przywracanie prawego kliknięcia - raz działa a raz nie
#51444
Author: __Maciek
Date: Tue, 19 Aug 2014 15:36
70 lines
3181 bytes
Hej, jest tu kto? :-)

Niedawno wgryzłem się trochę w podstawy JS i DOMu i zacząłem pisać
swoje skrypty dla GreaseMonkey. Nie mogę sobie jednak poradzić z jedną
rzeczą - strona ustawia sobie blokadę prawego kliknięcia, ćwiczę np.
na tej galerii:

http://www.st43.pl/4galery/details.php?image_id=10813

W źródle strony widzimy:

---------------------------------------------------------------

function right(e) {
    if ((document.layers || (document.getElementById &&
!document.all)) && (e.which == 2 || e.which == 3)) {
      alert("Š Copyright by Wielkopolska Galeria Kolejowa");
      return false;
    }
    else if (event.button == 2 || event.button == 3) {
      alert("Š Copyright by Wielkopolska Galeria Kolejowa");
      return false;
    }
    return true;
  }

  if (document.layers){
    document.captureEvents(Event.MOUSEDOWN);
    document.onmousedown = right;
  }
  else if (document.all && !document.getElementById){
    document.onmousedown = right;
  }

document.oncontextmenu = new Function("alert('Š Copyright by
Wielkopolska Galeria Kolejowa');return false");

---------------------------------------------------------------

Użycie bookmarkletu:

javascript:void(document.oncontextmenu=null);

przywraca normalne działanie prawego kliknięcia, jednak gdy w skrypcie
dla GM wpiszę:

document.oncontextmenu=null;

to nic to nie daje. Skrypt poza tym działa, bo robi jeszcze inne
rzeczy. Wpisanie powyższego w konsoli Firebuga daje zamierzony efekt
(context menu zaczyna działać).

Cały moj skrypt tutaj:
http://maciek100.boo.pl/inne/st43pl_-_ulatwienie_scia.user.js
(przerabia tutuł zdjęcia na link do pliku)

Jak to prawidłowo zrobić i dlaczego z GM nie działa?
Nie chodzi tu o "złamanie" tej konkretnej strony, tylko o poznanie
mechanizmu.


I jeszcze jedno przy okazji - Firebug, w podglądzie kodu strony podaje
coś takiego jak XPath. Dla ćwiczebnej galerii i elementu
(z)manipulowanego przez mój skrypt jest to:

/html/body/table/tbody/tr[2]/td/table[2]/tbody/tr/td/table/tbody/tr/td/table[2]/tbody/tr/td[3]/div/b/a

Czy jest jakiś sposób aby mając ten XPath, w prosty sposób dotrzeć do
elementu? Mocno by to ułatwiło pisanie userscriptów, gdy manipulowane
elementy nie mają atrybutów typu class czy id.
Re: Przywracanie prawego kliknięcia - raz działa a raz nie
#51445
Author: Paweł Piskorz
Date: Fri, 05 Sep 2014 11:48
61 lines
3197 bytes
W dniu 2014-08-19 o 17:36, __Maciek pisze:
> Hej, jest tu kto? :-)

Jest, tylko rzadko zagląda :/

> Niedawno wgryzłem się trochę w podstawy JS i DOMu i zacząłem pisać
> swoje skrypty dla GreaseMonkey. Nie mogę sobie jednak poradzić z jedną
> rzeczą - strona ustawia sobie blokadę prawego kliknięcia, ćwiczę np.
> na tej galerii:
>
> http://www.st43.pl/4galery/details.php?image_id=10813
>
> W źródle strony widzimy:
>
[8<]
>
> Użycie bookmarkletu:
>
> javascript:void(document.oncontextmenu=null);
>
> przywraca normalne działanie prawego kliknięcia, jednak gdy w skrypcie
> dla GM wpiszę:
>
> document.oncontextmenu=null;
>
> to nic to nie daje. Skrypt poza tym działa, bo robi jeszcze inne
> rzeczy. Wpisanie powyższego w konsoli Firebuga daje zamierzony efekt
> (context menu zaczyna działać).
>
> Cały moj skrypt tutaj:
> http://maciek100.boo.pl/inne/st43pl_-_ulatwienie_scia.user.js
> (przerabia tutuł zdjęcia na link do pliku)
>
> Jak to prawidłowo zrobić i dlaczego z GM nie działa?

Może skrypt GM jest wykonywany przed JSem tej strony? Spróbuj swój 
skrypt wywoływać dopiero gdy się strona załaduje, np.:
document.addEventListener('load', function(){
// tu Twój skrypt
});

> I jeszcze jedno przy okazji - Firebug, w podglądzie kodu strony podaje
> coś takiego jak XPath. Dla ćwiczebnej galerii i elementu
> (z)manipulowanego przez mój skrypt jest to:
>
> /html/body/table/tbody/tr[2]/td/table[2]/tbody/tr/td/table/tbody/tr/td/table[2]/tbody/tr/td[3]/div/b/a
>
> Czy jest jakiś sposób aby mając ten XPath, w prosty sposób dotrzeć do
> elementu?

https://developer.mozilla.org/en-US/docs/Web/API/document.evaluate
np.:
var xpath = 
"/html/body/table/tbody/tr[2]/td/table[2]/tbody/tr/td/table/tbody/tr/td/table[2]/tbody/tr/td[3]/div/b/a";
var zlapanyElement = document.evaluate(xpath, document, null, 
XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue


-- 
Pozdrawiam,
Paweł "PablO" Piskorz
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads