[JS] uruchomienie skryptu z paska adresu

0

hej. mam pewną stronkę na ktorej jest javascript wywolujący funkcje. Jest to formie linku, i ta funkcja zapisuje podana liczbe do danego pola input o typie "text" w formularzu na stronie. Link tak:

<a href="javascript:insertUnit(document.forms[0].spear, 80)">(80)</a>

ale jakbym chcial manualnie wykonać tą funkcję, czyli wkleić do paska adresu javascript:insertUnit(document.forms[0].spear, 80) to ni jak nie dziala, wklejam, enter i nic. a dodatkowo w IE wyskakuje blad ;p.

Dlaczego tak sie dzieje? Mozna jakos zrobic to tak aby wklejając ten skrypt do paska adresu, zadziałało? nie znam dokladnie js ani zasady dzialania, tylko bazuje na domyslach wiec prosze o jakas lagodna odpowiedz :D

0

A zarzuć no linkiem do strony gdzie próbujesz to zrobić.

0

na grze przeglądarkowej
http://www.plemiona.pl/, tylko trzeba sie zarejestrowac ;p.

a wczoraj z qmplem odkryłem, ze jak wykupi/dostanie się konto Premium, to wtedy działa normalnie tą funkcja wklejana do pasku adresu oO. I mocno się zdziwiłem.

0

A masz jakieś robocze konto którego danych nie bałbyś się tu wkleić? (albo wysłać mi prywatną wiadomością?) Rejestrować to mi się nie chce -- za długi regulamin :P.

Prawdopodobnie musiałbym to jednak zdebugować samodzielnie. Mogę się Ciebie zapytać o komunikat wyświetlany w konsoli Firefoxa (Narzędzia -> Konsola błędów), ale potem pewnie musiałbym się spytać o 150 kolejnych rzeczy.

Takie problemy z wklejaniem skryptu do paska adresu czasem się zdarzają. Wynikają np. z tego, że wywoływana funkcja używa tzw. kontekstu. Kontekstem podczas kliknięcia na hiperłącze jest hiperłącze. Skrypt może chcieć np. zmienić wygląd klikniętego hiperłącza. Gdy wywołasz go z paska adresu, to kontekstem nie jest już hiperłącze i skrypt próbuje zmienić wygląd czegoś, co nie zostało mu podane. I się wykrzacza. Tutaj jednak póki co nic nie sugeruje takiej możliwości.

0

postaram sie na szybko cos takiego zrobic ;p.

no ale wlasnie dziwne to jest, bo jak sie ma konto Premium to wtedy działa normalnie oO.

a Firefox pokazał takie coś, troche smiesznego ;p:

Błąd: insertUnit is not defined
Plik źródłowy: javascript:insertUnit(document.forms[0].spear,%20100)
Wiersz: 1
0

Ja tam myślę że premium konta mają po prostu pr0 haxorskie możliwości jak asynchroniczne budowanie czegoś tam i dla widoku strony na darmowym koncie po prostu nie jest dołączana biblioteka która wprowadza te funkcje. Na to wskazuje.

0

@Demonical Monk:
Tylko że -- jak rozumiem -- nawet na koncie zwykłym ta funkcja działa gdy kliknie się na przycisk, a nie działa gdy się ją wklei w pasek adresu.

To byłby przykład niezłego WTF-u gdyby do linku na koncie zwykłym dołączana była jakaś inna funkcja obsługująca zdarzenie i ew. wywołująca preventDefault() (coby href nie został przetworzony), a ten kod w atrybucie href był po prostu wtedy martwy... No ale nie takie WTF-y się widziało :).

0

Nie wiem, nie umiem za nic w to grać, ale wreszcie doszukałem się gdzie jest owa funkcja rekrutująca pikinierów. Jak wklepię kod do firebuga dostaję:

ReferenceError: insertUnit is not defined
Czyli funkcja jest w jakimś prototypie czy cholera wie czym?

Edit: Aha...
<frame name="main" src="game.php?screen=overview&amp;intro&amp;popup" border="0" marginheight="5" marginwidth="5" frameborder="0"/>

0

no wlasnie napisalem ten blad ale mnie wyprzedziliscie ;p. Treść funkcji mozna oblukac w przegladarce chrome jak sie otworzy jakis tam plik, niepamietam jaki, i nie jest to zadna skomplikowana funkcja...

wiec nie chodzi bo to ramka czy jak? ;p;

0
Demonical Monk napisał(a)

Nie wiem, nie umiem za nic w to grać, ale wreszcie doszukałem się gdzie jest owa funkcja rekrutująca pikinierów.

Haha! Sorry, jakoś mnie to rozbawiło :D. (poświęcenie programisty który zmusza się do jakiejś gry online...)

Demonical Monk napisał(a)

Czyli funkcja jest w jakimś prototypie czy cholera wie czym?

W prototypie to raczej by być nie mogła. Pod tym względem pasek adresu nie różni się od hrefu, o ile mi wiadomo.

Demonical Monk napisał(a)

Edit: Aha...

I wszystko jasne. Ciekawe więc, czy faktycznie działa toto w wersji Premium ;).

edit:
@brylcio16:
Funkcja jest zdefiniowana w innej ramce. Jakby: w innej przestrzeni nazw. Link zdefiniowany jest w tej samej ramce, natomiast pasek adresu działa "w kontekście" głównego dokumentu HTML, a nie tego z ramki. W głównym dokumencie funkcja insertUnit nie jest zdefiniowana.

0

no serio dziala na koncie z Premium. dzis u qmpla bylem rano i sprawdzalem z 5 razy ten sam kod wklejalem i działało na jego koncie. a po przelogowaniu na moje juz nie dzialalo.

A mozna to jakos ominąc? np otworzyc tylko tą ramkę w przegladarce albo cos :PP.

0
bswierczynski napisał(a)

@brylcio16:
Funkcja jest zdefiniowana w innej ramce. Jakby: w innej przestrzeni nazw. Link zdefiniowany jest w tej samej ramce, natomiast pasek adresu działa "w kontekście" głównego dokumentu HTML, a nie tego z ramki. W głównym dokumencie funkcja insertUnit nie jest zdefiniowana.

Właśnie miałem o tym napisać, tylko wrzuciłem na szybko fragment dotyczący ramki żeby się nie ośmieszyć :P

W każdym razie, możliwości operowania na ramkach nie ma zbyt dużo z poziomu javascriptu, więc raczej ciężko będzie stworzyć skrypt który po wklejeniu na pasek zadań wrzuci do tego pola jakąś liczbę. No ciekawe, czy w wersji premium pomija tą ramkę i klei stronę w całości... Możesz wkleić kod strony kiedy jesteś na tym placu i masz konto premium?

@up: Problem leży w tym, że gra jest zabezpieczona przed wyjściem z ramki, wklejenie:
http://XXX.plemiona.pl/game.php?screen=overview&intro&popup
Spowoduje przekierowanie użytkownika, więc bezpośrednio też nie wejdziesz.

0

mam tak caly kod zywcem tu wrzucic? xd czy do jakiegos pliku? ;p.

http://pastebin.4programmers.net/726

chyba dobrze to zrobilem ;p.

0

Nie zauważyłem że doszła kolejna strona odpowiedzi i ciągle sobie tam edytowałem mojego posta z poprzedniej strony... Tutaj co wstawiłem:


Dobra, dam maksymalnie h4xi0rsk0-bamberskie rozwiązanie, do którego się nie przyznaję. Nie sprawdzałem, nie logowałem się. Sprawdzać pod Firefoxem -- może zadziała, może nie:

javascript:var f=document.getElementsByName('main')[0];main.insertUnit(f.contentDocument.forms[0].spear,80)

^^to jedna długa linijka do wklejenia w pasek adresu.

Jakby się Demonical Monkowi chciało to może sprawdzić czy i czemu to nie działa, ew. autor może mi dać te dane do logowania to sam to zdiagnozuję jak mi się zachce (do takiego bamberskiego "pseudohackowania" trzeba jednak najlepiej programisty). Przeglądarki mogą po prostu nie dopuszczać do takich akcji ze względów bezpieczeństwa.

edit:
@brylcio16:
Ech, ten kod trzeba było wrzucić choćby na <url>codepad.org</url> lub na nasz forumowy pastebin. I dać linka. Bo tak to rozpieprza nam stronę.

0

Ale ty, w tym kodzie z premiuma nie ma żadnych ramek 8-O
Wręcz skrypt jest zabezpieczony przed wpakowaniem go w ramkę.

0
Demonical Monk napisał(a)

Ale ty, w tym kodzie z premiuma nie ma żadnych ramek 8-O
Wręcz skrypt jest zabezpieczony przed wpakowaniem go w ramkę.

No tak, ale co z tego? To trochę dziwne, że w premium ramek nie ma, a w darmowym są. Ale to niewiele nam tu zmienia. Operujemy na koncie darmowym i musimy się dostać do funkcji (i elementu DOM) z innej ramki. Brak ramek w Premium tłumaczy jedynie czemu tam wklejanie w pasek adresu działa.

0

dziala twoje haxerskie rozwiazanie :D dziekuje bardzo :D.
Ale mam pytanie. Czy bedzie to dzialac takze na tym premiumie?

No wlasnie, mowilem ze na premiumie dziala bez problemu ;p.

0

@brylcio16:
Na premiumie korzystaj z tego Twojego, prostszego, które już działa. To moje nie będzie działało, bo będzie chciało sięgnąć do ramki, a w Premiumie tej ramki nie ma. Mógłbym napisać kod, który rozpoznaje czy trzeba sięgnąć do ramki czy nie i wtedy miałbyś jedną zakładkę i tu i tu, ale mi się nie chce. To już dla mnie żadne wyzwanie -- a z tamtym akurat trafiłeś na coś, co mnie zaciekawiło (normalnie nie daję ludziom gotowego kodu -- chyba że dla nich pracuję ;) ).

0

hehe :D spoko, ale jeszcze raz dzieki :). w sumie to ja robie sobie program w c++ w ktorym chce sie wlasnie odnosic do tej gry, zeby przez niego moc sterować nią. jeszcze pewno bede mial problem zeby wymusic klikniecie na przycisk "Napad" ale moze sobie jakos poradze ;p.

tak btw. Jeszcze raz wielkie dzieki, szkoda ze tutaj cos takiego jak SOG'ów nie mozna przyznawac ;p

0

Tu nie ma głupich funkcji. A ogólnie jeśli zabierasz się za sterowanie grą przez nakładkę w C++ to szczerze mówiąc to jest zabieranie się do tego z d**y strony. Lepiej przeanalizować jakie dane lecą POSTem/GETem żeby się zalogować, a potem jakie żeby napaść kogośtam i normalnie to wysyłać.

0

a jak taka "analize" przeprowadzic? jak wychwycić te dane?:P

0

Firebug (rozszerzenie do Firefoxa) bardzo pomaga.

Dla przykładu, żeby się zalogować musisz POSTem wysłać dane:

Adres: index.php?action=login&server_list=1


user=nazwa_usera
password=haslo
server=plXXX lub sds

Resztę zostawię do odkrycia tobie, przy okazji poduczysz się używać Firebuga.

0

ale to chodzi zeby to wyslac do przegladarki, np Firefox'a, tak? dobrze skumalem? ;p.

0

Nie do przeglądarki, z programu który masz w C++ czy czym, wysyłasz curlem to bezpośrednio na serwer.

0

ahaaa :-) , dobra dzieki, :) cos tam sie pobawię :).

juz wiem co to ten firebug do firefoxa :) podobne narzędzie jest od razu w Google Chrome, a uzywam jej, gdyz Firefox mi strasznie muli ;p.

0 użytkowników online, w tym zalogowanych: 0, gości: 0