[JS][HTML] edycja pól formularza w iframe

0

Witam.
chcę napisać program do automatyzacji zadań na poszczególnych stronach.
dokładniej mówiąc chcę załadować w ramki strony typu pajacyk.pl (w niektórych trzeba wpisac w forme nick) i klikać na "brzuszki".

w celu edykacyjnym napisałem najprostszy możliwy iframe z formą i javascript skopiowałem sobie z jakiegoś tutoriala.

form.htm:

<html><body>
<form name=f>
<input type="text" name=q>
</form
</body></html>

g.htm:

<html><body>

<iframe src="form.htm" name=MyFrame ></iframe>

<script type="text/javascript">
document.MyFrame.f.q.value="przykładowa wartość"; 
</script>

</body></html>

jednak ten kod nie działa. tzn nic się nie wpisuje.
ramka jest wszystkie nazwy się zgadzają, nie widzę błędu. takie coś da się w ogóle zrobić?

dzięki za odpowiedzi

0

Nie możesz ingerować w zawartość tego co jest w ramce...

0

:/ a mogę jakoś inaczej ingerować w inne strony? jakiś frameset czy coś?

0
dasiuss napisał(a)

:/ a mogę jakoś inaczej ingerować w inne strony? jakiś frameset czy coś?

Za pomocą JS nie.

0

Jak nie można ignerować w zawartość ramki? Można można :)

var ramka = document.getElementById("some_iframe");

var rdocument = ramka.document || ramka.contentDocument; // pobieramy dokument ramki (inaczej pod IE, inaczej pod Firefox)
rdocument.getElementById("element_w_ramce").innerHTML = 'Zmieniam coś w ramce';
0

thx kubArek, ale to też mi niedziała :/
dostosowałem do moich nazw:


<iframe src="form.htm" id="qwerty"></iframe>
<script type="text/javascript">
var ramka = document.getElementById("qwerty");
var rdocument = ramka.document || ramka.contentDocument; // pobieramy dokument ramki (inaczej pod IE, inaczej pod Firefox)
rdocument.getElementById("f").innerHTML = "g";
</script>

ale nic z tego.

próbowałem też zmieniać ostatnią linijkę na

rdocument.getElementById("f").getElementById("q").innerHTML = "g";

i

rdocument.getElementById("f").getElementById("q").value = "g";

i

rdocument.getElementById("f").innerHTML = rdocument.getElementById("f").getElementById("q")="g";

i

rdocument.getElementById("f").innerHTML = .value="g";

i

rdocument.getElementById("f").getElementById("q").innerHTML = .value="g";

i sam już niewiem jak to powinno być :F
ogólnie nic się nie dzieje. dokładnie żadnej zmiany (mogło by coś zniknąć chociaż :P)
co robie źle?

0
kubARek napisał(a)

Jak nie można ignerować w zawartość ramki? Można można :)

var ramka = document.getElementById("some_iframe");

var rdocument = ramka.document || ramka.contentDocument; // pobieramy dokument ramki (inaczej pod IE, inaczej pod Firefox)
rdocument.getElementById("element_w_ramce").innerHTML = 'Zmieniam coś w ramce';

A to aby nie wywali błędu bezpieczeństwa?

0

@Demonical Monk:
Sprawdzać mi się nie chce, ale IMO masz rację -- przeglądarka wywali błąd naruszenia zasad bezpieczeństwa. Jestem praktycznie pewien, że wywali gdy iframe i strona ze skryptem są w różnych domenach.

@dasiuss:
Masz to gdzieś powieszone na publicu? Możesz dać link? Uznaj mnie za lenia, ale gdy pomogłeś tego dnia już 5 osobom to nie chce Ci się tworzyć u siebie na dysku plików z szablonami i skryptami i jeszcze wrzucać jakiś dokument na inną domenę.

0
bswierczynski napisał(a)

@dasiuss:
Masz to gdzieś powieszone na publicu? Możesz dać link? Uznaj mnie za lenia, ale gdy pomogłeś tego dnia już 5 osobom to nie chce Ci się tworzyć u siebie na dysku plików z szablonami i skryptami i jeszcze wrzucać jakiś dokument na inną domenę.

ogólnie to ja piszę w Au3 i ten kod piszę dynamicznie. nie jest nigdzie umieszczony (nawet nie w żadnym pliku) Od razu wstrzykuję do IE.

dlatego też nie jest opublikowany nigdzie.
mogę najwyżej podać tak jak wyżej zawartość tych dwóch plików. (a raczej tak jakby to wyglądało po wstrzyknięciu)

a więc:
g.html:

<html><body>

<iframe src="form.htm" id="qwerty"></iframe>

<script type="text/javascript">
var ramka = document.getElementById("qwerty");

var rdocument = ramka.document || ramka.contentDocument; // pobieramy dokument ramki (inaczej pod IE, inaczej pod Firefox)
rdocument.getElementById("f").innerHTML = "cokolwiek";
</script></body></html>

form.html:

<html><body>

<form id="f">
<input type="text" id="q">

</form></body></html>
bswierczynski napisał(a)

Uznaj mnie za lenia, ale gdy pomogłeś tego dnia już 5 osobom to nie chce Ci się tworzyć u siebie na dysku plików z szablonami i skryptami i jeszcze wrzucać jakiś dokument na inną domenę.

na razie oba pliki są na localhoscie, więc to chyba jedna domena...

co do zmęczenia, to ja również trochę mam dziś za sobą także proponuje odłożyć problem do jutra :P
dzięki za pomoc.

0

Faktycznie, na localu polityka bezpieczeństwa przeglądarek jest nieco inna.

No dobra, zebrałem się i zrobiłem u siebie na localu te 2 pliki. Już wiem o co chodzi.

Ramka ładuje się przecież równolegle. Przeglądarka nie czeka z odpaleniem skryptów do załadowania iframe'a. Wykonuje Twój skrypt natychmiast, zanim jeszcze ramka się załaduje. Skrypt próbuje pobrać element z ramki, która nie jest jeszcze załadowana. getElementById zwraca null. Potem skrypt odnosi się do tego nulla jak do elementu, więc się wysypuje.

Rozwiązanie: kod, który ma się wykonać po załadowaniu ramki opakuj w funkcję (może być anonimowa) i przypisz tę funkcję do onload ramki.

Brzmi skomplikowanie, ale myślę, że bez trudu załapiesz o co chodzi:

var ramka = document.getElementById("qwerty");
ramka.onload = function() {
  var rdocument = ramka.document || ramka.contentDocument;
  rdocument.getElementById("f").innerHTML = "cokolwiek";
};

edit: Działa w Firefoxie, w IE nie (getElementById zwraca tam wciąż null). Może mi się zachce sprawdzić czemu, może nie.

0

No biorąc to na logikę... Robisz ramkę na 100% dostępnego ekranu, otwierasz stronę banku i przelinkowujesz action formularza logującego. Nie sądzę żeby nikt nie wziął takiej możliwości pod uwagę, więc imo poza localhostem ci to nie podziała, a na localhoście nie ma sensu tego robić w ten sposób.

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