Forum: PC-Programmierung Javascript / Greasemonkey: Form submit in iframe automatisieren


von Cyblord -. (Gast)


Lesenswert?

Folgendes Szenario:

Ich habe eine lokale html Datei auf Platte liegen, die folgenden 
Abschnitt enthält:
1
<iframe src="domain-not-under-my-control.com/form.html" data-month="1">
2
</iframe>
3
4
<iframe src="domain-not-under-my-control.com/form.html" data-month="2">
5
</iframe>
6
7
<iframe src="domain-not-under-my-control.com/form.html" data-month="3">
8
</iframe>
9
10
//... noch ein paar mehr iframes mit immer derselben form

Ich binde von einer Domain, die nicht unter meiner Fuchtel steht 
mehrmals ein Formular über ein iframe in mein lokales html ein.
Ich möchte folgendes bewerkstelligen wovon mich die same-origin-policy 
noch stoppt:

Sobald ein iframe geladen ist, soll ein Wert in der <select>-Box 
innerhalb des Formulars selektiert werden (in jedem iframe wird ein 
anderer Wert selektiert) und dann das Formular abgeschickt werden.

Sinngemäß sieht das Formular so aus:
1
<form action="displaydata.php" method="post">
2
  <select name="month">
3
    <option value="1">1</option>
4
    <option value="2">2</option>
5
    <option value="3">3</option>
6
    //...
7
  </select>
8
  <input type="submit" value="Send" />
9
</form>

Manuell mit Maus funzt das ohne Probleme, aber das ist lästig. Möchte 
ich dasselbe mit javascript machen, spuckt mir die same-origin-policy in 
die Suppe.

Wie kann man das bewerkstelligen? Ein Lösung ohne Add-Ons wäre super, 
Greasemonkey wäre auch akzeptabel. Es wäre auch ok wenn es erstmal nur 
im Firefox geht.

von Andreas K. (andreas_k209)


Lesenswert?

um same-origin-policy zu überbrücken, habe ich alles über einen lokalen 
Server (oder Raspi) in php durchgeschleust.

Hier hole ich z.B. Daten einer Dreambox:

get.php?url=anderedomain/irgendeineseite
1
<?php
2
//get TV-Infos
3
4
 header("Content-Type: text/xml; charset=utf-8");
5
 
6
 $url=@$_GET['url'];
7
 //url=http://192.168.0.99/web/getservices?sRef=1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "userbouquet.favourites.tv" ORDER BY bouquet
8
 $linien=@file($url); //HTMl-Seite einlesen
9
 if($linien ===  FALSE)
10
        {
11
        //Datei konnte nicht gelesen werden
12
            echo '<?xml version="1.0" encoding="utf-8" ?>';
13
            echo '<sender>';
14
            echo '<stat info="nodata" />';
15
            echo '</sender>';
16
        } 
17
        else
18
        {
19
            foreach ($linien as $line_num => $line) 
20
                {
21
                echo $line;
22
                }  
23
        }
24
?>

Kannst Du nicht die Daten an displaydata.php direkt verschicken? (siehe 
XMLHttpRequest)

Andererseits ist die same-origin-policy ja da um sowas zu verhindern.

: Bearbeitet durch User
von Cyblord -. (Gast)


Lesenswert?

Andreas K. schrieb:
> um same-origin-policy zu überbrücken, habe ich alles über einen lokalen
> Server (oder Raspi) in php durchgeschleust.

Ja ein lokaler Proxy wäre normalerweise eine Lösung, aber so einen kann 
ich nicht in Betrieb nehmen, da es um ein Intranet-Web-Tool in der Firma 
geht und ich diese Lösung gerne auch an Kollegen weitergeben möchte.

Mittlerweile habe ich für meinen konkreten Fall noch eine Lösung 
gefunden, die ganz ohne JS auskommt, da das Ding auch über GET-Parameter 
steuerbar ist.

von Matt P. (Firma: mnc) (mattyp)


Lesenswert?

Can Javascript be added to a site 
https://babasupport.org/apple/iphone-error-4005/ for better website 
options ??? I want to make some changes to it. Also, tell me a better 
alternative for Android Studio.

von c.m. (Gast)


Lesenswert?

muss das in deiner lokalen html-datei laufen, oder willst du einfach nur 
den response von den posts haben?
wenn ja, schau dir mal curl an. damit kannst du z.b. in einer loop deine 
monate verändern und das ergebnis laden.
https://gist.github.com/subfuzion/08c5d85437d5d4f00e58
1
curl -H 'Content-Type: application/x-www-form-urlencoded' -d 'month=1&bla=2'
das ganze eingepackt in eine loop
1
for m in $(seq 1 12); do .... done;
wobei 'month=1&bla=2' zu 'month=${m}&bla=2' wird.

von Cyblord -. (Gast)


Lesenswert?

c.m. schrieb:
> wenn ja, schau dir mal curl an.

Prinzipiell richtig, allerdings muss man noch cookie und session und 
Authentifizierungskacke mitschicken, die sich bei jedem Aufruf ändert, 
wäre schon gegangen aber wäre auch echt Arbeit geworden. Ist halt so 
eine altbackene Firmen-Intranetseiten-Applikation, die selbst niemand 
mehr anfassen mag, und die bei mir anfragende Entität wünschte sich halt 
gerne eine einfache managergerechte One-Click-Solution, ohne 
Installation von irgendwelchen zusätzlichen Tools. Da das Ding mit GET 
genauso steuerbar ist wie mit POST, ging das glücklicherweise relativ 
simpel mit iframes und URLs ohne JS.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.