[JavaScript] Formularfelder in Popupfenster ausfüllen (über getElementById)

  • JavaScript

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    [JavaScript] Formularfelder in Popupfenster ausfüllen (über getElementById)

    Ich möchte per JavaScript einige Formularfelder in einem Popupfenster ausfüllen, welches ich vorher ebenfalls per JS geöffnet habe. Das ganze wollte ich über "getElementById" realisieren. Nur leider klappt es nicht. Es heißt immer:

    Fehler: mailer.document.getElementById("subject") is null

    Vorab die Frage: Kann es an der Domain liegen?

    Hauptseite: domain.de
    Popup: sub.domain.de

    Hier mein Code:

    HTML-Quellcode

    1. <a href="#" onclick="mailer=window.open('http://www.amateurfilm-forum.de/index.php?form=Mail&amp;userID=1','mailer');mailer.document.getElementById('subject').value='hallo';mailer.focus();"><img src="./emailS.png" title="E-Mail senden" alt="" height="16" border="0" width="16"></a>

    Bzw. nur das JS:

    JavaScript-Quellcode

    1. mailer=window.open('http://www.amateurfilm-forum.de/index.php?form=Mail&amp;userID=1','mailer');mailer.document.getElementById('subject').value='hallo';mailer.focus();

    Komischerweise klappt "...document.write(...)" einwandfrei. Also vermute ich kein Sicherheitsfeature (wegen der unterschiedlichen Subdomain).

    Das Feld "subject" existiert und hat die entsprechende ID.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hast du es mal lokal ausprobiert? Damit das mit der Subdomain ausschließen kannst?

    Eigentlich müsste das Funktionieren, aber der Inline Script sieht ziemlich böse aus, mach doch ein vernünftigen Script-Tag und packe dort die Funktionen rein.

    Edit: Das liegt daran, dass das Dokument noch nicht komplett geladen ist, ich schreib dir schnell mal eine Funktion die funktioniert.

    Edit2: so das Script in den Header Bereich

    Quellcode

    1. <script language="javascript" type="text/javascript">
    2. <!--
    3. var fenster;
    4. function openPopup(url, subject) {
    5. fenster = window.open(url, "mailer", "width=600,height=400,status=yes,scrollbars=yes,resizable=yes");
    6. insert(subject);
    7. }
    8. function insert(subject) {
    9. try {
    10. fenster.document.getElementById('subject').value = subject;
    11. fenster.focus();
    12. } catch(e) {
    13. setTimeout("insert('"+subject+"');", 100);
    14. }
    15. }
    16. //-->
    17. </script>


    Aufruf:

    HTML-Quellcode

    1. <a href="javascript:void(0);" onclick="openPopup('http://www.amateurfilm-forum.de/index.php?form=Mail&userID=1', 'Hallo');">Open</a>


    PS: Bei JS muss man URLs nicht Escapen, glaube das führt zu Fehlern im Aufruf der URL.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Dodo“ ()

    Dodo schrieb:

    Edit: Das liegt daran, dass das Dokument noch nicht komplett geladen ist, ich schreib dir schnell mal eine Funktion die funktioniert.

    Daran lag es tatsächlich! Danke, mit deinem Skript geht es nun!

    Dodo schrieb:

    PS: Bei JS muss man URLs nicht Escapen, glaube das führt zu Fehlern im Aufruf der URL.

    Ich weiß und ich weiß nicht, wie das "&amp" da hin kommt. Im PHP-Quellcode, der die HTML-Ausgabe erzeugt, steht "&".
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Es scheint wohl doch (zusätzlich) ein Sicherheitsproblem zu sein. Was lokal einwandfrei funktioniert, geht online nicht. Oder geht es bei dir von lokal zu Web?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Muss ich morgen mal Testen, bin gerade nicht @home sondern bei meiner Family.
    Prinzipiell sollte es funktionieren, sagt denn die Fehlerkonsole was entsprechendes?? Normal werden Sicherheitsblockaden dort auch als Security Access Exception oder ähnliches ausgeworfen.
    Nein, die Firefox-Fehlerkonsole enthält leider gar nichts.

    Aber da es bei identischer Domain klappt, muss es ein Sicherheitsfeature sein.

    Edit: Ich habe nun noch etwas hin und her getestet und es scheint eindeutig, wenn auch ohne Fehlermeldung: man kann zwischen verschiedenen Domains, auch wenn es nur unterschiedliche Subdomains sind, keine Formularfelder abfragen oder deren Wert ändern.

    Ich habe es nun so gelöst, dass ich bei Domain #1 eine HTML-Datei auf Domain #2 aufrufe (im Popup), die wiederrum das Mailformular auf Domain #2 per JavaScript aufruft (wieder im Popup). Das erste Popup schließt sich dann automatisch und letztendlich habe ich dann mein gewünschtes Ergebnis (wenn auch über 10 Ecken). Einfacher scheint es nicht zu gehen.

    Leider funktioniert eine Sache noch nicht: Ich will einen Zeilenumbruch erreichen (im Textfeld). Aber "\r\n" scheint nicht zu klappen. Vorher ging es aber. Was nun anders ist, weiß ich nicht (bzw. es ist extrem viel anders).

    Edit 2: Das Zeilenumbruchproblem ist gelöst. Ich musste im PHP-Skript die "\r\n" schon als echten Zeilenumbruch übermitteln (nicht als String). Also über "\r\n" statt '\r\n'.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()