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
Author: __Maciek
Date: Tue, 19 Aug 2014 15:36
Date: Tue, 19 Aug 2014 15:36
70 lines
3181 bytes
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
Author: Paweł Piskorz
Date: Fri, 05 Sep 2014 11:48
Date: Fri, 05 Sep 2014 11:48
61 lines
3197 bytes
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