mattfi: Hilfe: Objekt lokal erkannt, auf dem Server nicht

Hallo Forumsteilnehmer,

aus einer Datei x.htm heraus möchte ich den Eingabewert eines Formulars an ein weiteres, nicht im Frameset liegendes Fenster ("report") einer weiteren Datei ("mapping_report.htm") weitergeben, u.zw. dort an ein weiteres Formularfeld ("Mapping.ProdArea"):

function passText(str) {
 report = window.open("mapping_report.htm", "report", "width=500,height=320,scrollbars=yes");
 window.report.Mapping.ProdArea.value = str;
}

Wenn ich das Ganze lokal (Dateisystem, nicht localhost) ausführe, funktionierte es, wenn ich die Dateien auf den Server hochlade und das Skript dort ausführe, kriege ich die Fehlermeldung: "window.report.Mapping.ProdArea.value ist kein Objekt".

Kann mir bitte jemand sagen, warum, bzw. helfen, wie ich es besser machen kann?

Matthias

  1. Hi,

    Wenn ich das Ganze lokal (Dateisystem, nicht localhost) ausführe, funktionierte es,

    da kannst Du mal sehen, wie schnell Dein Filesystem ist. HTTP-Roundtrips brauchen ungleich länger.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah,

      das verstehe ich nicht:

      da kannst Du mal sehen, wie schnell Dein Filesystem ist. HTTP-Roundtrips brauchen ungleich länger.

      Ich kriege ja nicht irgendein timeout, sondern eine Handfeste Fehlermeldung "[Zielformularfeld] nicht als Objekt erkannt."

      Matthias

      1. Hi,

        da kannst Du mal sehen, wie schnell Dein Filesystem ist. HTTP-Roundtrips brauchen ungleich länger.
        Ich kriege ja nicht irgendein timeout, sondern eine Handfeste Fehlermeldung "[Zielformularfeld] nicht als Objekt erkannt."

        ja, denn in dem Moment, in dem Du fragst, existiert das Objekt nicht, weil noch nicht mal das Dokument da ist. Warte ein paar Jahre.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Aha:

          Ich kriege ja nicht irgendein timeout, sondern eine Handfeste Fehlermeldung "[Zielformularfeld] nicht als Objekt erkannt."
          ja, denn in dem Moment, in dem Du fragst, existiert das Objekt nicht, weil noch nicht mal das Dokument da ist. Warte ein paar Jahre.

          Quod facere? Welche Alternativlösung kann ich anwenden, um dieses Problem zu umgehen?

          Matthias

          1. Hallo Matthias,

            Quod facere? Welche Alternativlösung kann ich anwenden, um dieses Problem zu umgehen?

            Du könntest z.B. den String per URL übergeben und im mapping_report.htm onLoad dem Formularfeld zuweisen.

            function passText(str) {
             report = window.open("mapping_report.htm?str=" + str, "report", "width=500,height=320,scrollbars=yes");
            }

            Grüße
            Andreas

            --
            Hier könnte Ihre Werbung stehen.
            1. Ich kann nicht aus dem Zieldokument heraus Informationen anfordern, da muss eine andere Lösung her, aber welche?

              Wie gesagt, die Formulareingabe erfolgt in n Dateien, alle Formulardaten werden nacheinander in das eine Zieldokument mapping_report.htm transferiert.

              Axels Lösung führt zum Ansprechen von Formulardaten aus dem Ausgangsdokument n+1, das noch gar nicht geöffnet (geschweige denn ausgefüllt) ist; Andis Lösung führt zum Überschreiben der URL-Parameterinformation durch Formulardatei n+1.

              Muss ich mich eventuell von der Formulardatei verabschieden, alles in ein Cookie schreiben und am Ende den ganzen Summs auf einen Rutsch in das Zieldokument mapping_report.htm schreiben?

              Aber: Ich selber bin gegenüber Cookies skeptisch eingestellt, ich mag es nicht, wenn andere Leute uneingeladen bei mir in die Wohnung drängen, sich einen Wein aus dem Kühlschrank holen und diesen in meinem Wohnzimmer genießen; dasselbe gilt für meinen Rechner. Ich denke, manch anderer hat ein ebensolches "Reviergefühl" und daher eventuell Cookies deaktiviert. Ich würde in meiner Programmierung lieber ohne Cookies auskommen.

              1. Hallo Matthias,

                Wie gesagt, die Formulareingabe erfolgt in n Dateien, alle Formulardaten werden nacheinander in das eine Zieldokument mapping_report.htm transferiert.

                Nur zum Vertändnis:
                Du möchtest
                1. aus einem Dokument ein Popup öffnen
                2. einem Formularfeld im Popupfenster aus dem Hauptdokument heraus einen Wert zuweisen
                3. im Hauptfenster ein weiteres Dokument öffnen, ohne dass das Popup geschlossen wird
                4. aus diesem Dokument heraus einen weiteren Wert an das Popup schicken
                5. die Punkte 3 und 4 mehrfach wiederholen.

                Verstehe ich Dich da jetzt richtig?

                Grüße
                Andreas

                --
                Hier könnte Ihre Werbung stehen.
                1. Hallo Andreas,

                  1. einem Formularfeld im Popupfenster aus dem Hauptdokument heraus einen Wert zuweisen

                  Einem Formularfeld in einem Frame im Popupfenster...

                  (Ich schau es mir auch gerade an ;-))

                  http://www.nexus-solutions.de/info.htm   <-- Was man nicht alles den Leuten abnimmt ;-)

                  @Matthias:

                  Schau mal hier: http://aktuell.de.selfhtml.org/tippstricks/javascript/fensterzugriff/index.htm

                  gruesse
                  rainer groth

                  --
                  ss:| zu:} ls:& fo:) de:] va:| ch:] n4:° rl:? br:$ js:| ie:| fl:( mo:?
                  (--> einer der letzten bauhaeusler <--)
                  1. Hallo Rainer

                    Schau mal hier: http://aktuell.de.selfhtml.org/tippstricks/javascript/fensterzugriff/index.htm

                    Danke für den Link, die Erklärung ist prima gemacht (=idiotensicher).
                    Ich programmiere javaScript zwar erst seit ca. drei Tagen, aber der Inhalt der Demo war mir begrifflich bekannt, weil ich von einem im Internet verfügbaren Skript ausging (das die Daten über parent.xxx überträgt).

                    http://www.nexus-solutions.de/info.htm

                    Da ich mich inzwischen dazu entschlossen habe, ein neues Frameset zu generieren, wird von dieser Adresse inzwischen das Frameset aufgerufen. (Ich habe noch Problkeme mit dem Frameset, aber bis morgen dürfte es laufen.)

                    <-- Was man nicht alles den Leuten abnimmt ;-)

                    Bitte nimm es mir nicht böse, aber ich habe heute ein paar sehr, sehr ruppige Antworten in diesem Forum gelesen (nicht unbedingt nur auf meine eigenen Mails beschränkt, nein, bis auf ein, zwei Ausnahmen eher nicht). Ich kenne Foren/Listen, in denen es ähnlich zugeht, ich kenne aber auch solche, in denen noch nie  ja, genau: frequency="0"  jemand öffentlich gemaßregelt oder bloßgestellt wurde, nur weil er ein Anfänger und, so zu sagen, was das Fachgebiet anbelangt, ein "kleiner Dummkopf" ist. Ich empfehle die Liste von www.frame-user.de als megahöfliches und -zuvorkommendes Beispiel einer Mailingliste ;-)

                    Natürlich bin ich weiterhin für jede Art der Hilfe äußerst dankbar...

                    Gruß,

                    Matthias

                    1. Hallo mattfi,

                      http://www.nexus-solutions.de/info.htm
                      ...(Ich habe noch Problkeme mit dem Frameset, aber bis morgen dürfte es laufen.)

                      Das mit den Problemen stimmt leider :-(

                      Meine Vorschlaege:

                      1. Verwende HTML 4.01;

                      2. Korrigiere UNBEDINGT den Tipp-Fehler in Deiner "mapping.htm" (Zeile 37);

                      3. Validiere UNBEDINGT Deine HTML-Dateien, um diverse (Verschachtelungs-) Fehler zu korrigieren - besonders Deine "mapping_00.htm" und "mapping_report.htm" muessen noch einmal ueberarbeitet werden ;-)

                      Und dann schauen wir weiter...

                      gruesse
                      rainer groth

                      --
                      ss:| zu:} ls:& fo:) de:] va:| ch:] n4:° rl:? br:$ js:| ie:| fl:( mo:?
                      (--> einer der letzten bauhaeusler <--)
                      1. Hey,

                        der Tipp war Gold wert um 00:05! Danke.

                        1. Korrigiere UNBEDINGT den Tipp-Fehler in Deiner "mapping.htm" (Zeile 37);

                        Welche Vorteile bringt es?
                        Welche Nachteile evtl., ich meine browserverbreitungsmäßig?

                        1. Verwende HTML 4.01;

                        Das ist eine Aufgabe für einen neuen Tag...

                        1. Validiere UNBEDINGT Deine HTML-Dateien, um diverse (Verschachtelungs-) Fehler zu korrigieren - besonders Deine "mapping_00.htm" und "mapping_report.htm" muessen noch einmal ueberarbeitet werden ;-)

                        Jup, danke. Und 1 gute Nacht.

                        Und dann schauen wir weiter...

                        Matthias

                        1. Hallo Matthias,

                          1. Verwende HTML 4.01;
                            Welche Vorteile bringt es?
                            Welche Nachteile evtl., ich meine browserverbreitungsmäßig?

                          Schau mal hier: http://selfhtml.teamone.de/intro/technologien/html.htm#versionen (Kleine Ergaenzung von mir: Nach der Veroeffentlichung von HTML 4.0 gab es eine 'Rueckrufaktion' und es wurde 'auf HTML 4.01 nachgeruestet').

                          Und schau auch mal hier: http://selfhtml.teamone.de/html/allgemein/grundgeruest.htm#dokumenttyp - kurz: der gewaehlte Dokumenttyp entscheidet darueber, welcher Parser den Quelltext wie interpretiert (SEHR wichtig beim Einsatz von CSS).

                          gruesse
                          rainer groth

                          --
                          ss:| zu:} ls:& fo:) de:] va:| ch:] n4:° rl:? br:$ js:| ie:| fl:( mo:?
                          (--> einer der letzten bauhaeusler <--)
                        1. Verwende HTML 4.01;
                        2. Korrigiere UNBEDINGT den Tipp-Fehler in Deiner "mapping.htm"
                        3. Validiere UNBEDINGT Deine HTML-Dateien

                        Melde Vollzug...

                        Und dann schauen wir weiter...

                        Uhh, achja, da war doch mein eigentliches Problem, nämlich dass mein JavaScriptchen nicht so lief wie ich es wollte...!

                        Aaaaalso: FÜr jede Hilfe bin ich dankbar.

                        <!-- Hoffe dieses Posting liest noch eine(r), nachdem es so weit nach unten gerutscht ist... -->

                        Matthias

                          1. Verwende HTML 4.01;
                          2. Korrigiere UNBEDINGT den Tipp-Fehler in Deiner "mapping.htm"
                          3. Validiere UNBEDINGT Deine HTML-Dateien
                            Melde Vollzug...

                          Brav ;-)

                          Bleiben also nur noch:

                          in Deiner 'mapping.htm' die Platzierung des 'noframes'-Bereiches mit einem BITTE sinnvolleren Inhalt;

                          in Deiner 'mapping_start.htm' in Zeile 86 und Zeile 94 die fehlenden '>';

                          in Deiner 'mapping_report.htm' in Zeile 20 das fehlende '>'.

                          gruesse
                          rainer groth

                          --
                          ss:| zu:} ls:& fo:) de:] va:| ch:] n4:° rl:? br:$ js:| ie:| fl:( mo:?
                          (--> einer der letzten bauhaeusler <--)
                          1. Danke, Rainer.

                            Und _das_ lässt der Parser durchgehen?!

                            in Deiner 'mapping_start.htm' in Zeile 86 und Zeile 94 die fehlenden '>';
                            in Deiner 'mapping_report.htm' in Zeile 20 das fehlende '>'.

                            Das ist jetzt ehrlich gemeint: Wieso ist der Inhalt schlecht?
                            Welchen besseren schlägst du vor?

                            in Deiner 'mapping.htm' die Platzierung des 'noframes'-Bereiches mit einem BITTE sinnvolleren Inhalt;

                            Matthias

                            1. Hallo Matthias,

                              Und _das_ lässt der Parser durchgehen?!

                              Genauer: der HTML-Parser eines/mehrerer Browser handelt im Sinne von 'vorauseilendem Gehorsam' - und mit viel Glueck wird das dargestellt, was Du Dir vorgestellt hast (schau mal hier: http://selfhtml.teamone.de/html/allgemein/textauszeichnung.htm#html_parser, wobei wir erst vor kurzem den JavaScript-Parser des Netscape 6.x bei bedenklichen Interpretationen erwischt haben - "nobody's perfect !").

                              in Deiner 'mapping.htm' die Platzierung des 'noframes'-Bereiches mit einem BITTE sinnvolleren Inhalt;
                              Das ist jetzt ehrlich gemeint: Wieso ist der Inhalt schlecht?
                              Welchen besseren schlägst du vor?

                              Zum Inhalt:

                              Ein lapidarer Hinweis auf einen MSIE 6-Download ist IMHO nicht die prallste Idee, denn vielleicht hat User etwas gegen MS-Produkte, oder kann/darf nichts installieren.
                              Also waeren Links zu einer frame-losen Version Deiner Site hilfreicher/user-freundlicher.

                              Zur Position im Quelltext (MEINE Meinung):

                              1. Der HTML-Parser ignoriert Tags, die er nicht kennt (der Goettin sei dank !);

                              2. Ein nicht-frame-fahiger Parser wird bei Deinem Quelltext also (vereinfacht) folgendes lesen:

                              "<HTML>
                               <HEAD></HEAD>
                               </HTML>"

                              weil ein Parser, der 'frameset' etc. nicht kennt, IMO auch 'noframes' nicht kennt ;-)

                              Aber auch wenn er es kennt, liest er doch folgendes:

                              "<HTML>
                               <HEAD></HEAD>
                               <NOFRAMES></NOFRAMES>
                               </HTML>"

                              und sollte (so er etwas HTML-Grundverstaendnis aus dem HTML-Kindergarten mitbringt) etwas ins Schleudern kommen, weil er gelernt hat, dass die Inhalte, die er in seinem Darstellungsbereich darstellen soll, in 'body'-Tags eingeschlossen sind ;-)

                              Deshalb MEIN Vorschlag:

                              "<HTML>
                                <HEAD></HEAD>
                                 <FRAMSET></FRAMESET>
                                   <NOFRAMES>
                                    <BODY></BODY>
                                   </NOFRAMES>
                               </HTML>"

                              Und ja, ich weiss, dass es unter http://selfhtml.teamone.de/html/frames/definieren.htm#noframes anders erklaert ist ;-).

                              gruesse
                              rainer groth

                              --
                              ss:| zu:} ls:& fo:) de:] va:| ch:] n4:° rl:? br:$ js:| ie:| fl:( mo:?
                              (--> einer der letzten bauhaeusler <--)
                      2. Hallo Rainer,

                        1. Verwende HTML 4.01;
                        2. Korrigiere UNBEDINGT den Tipp-Fehler in Deiner "mapping.htm"
                        3. Validiere UNBEDINGT Deine HTML-Dateien

                        [...]

                        Und dann schauen wir weiter...

                        Soo. Das Zeitproblem ist gelöst: Innerhalb eines Framesets tritt es nämlich nicht auf; es tritt nur auf von einem Fenster x zu einem zweiten, nicht framegebundenen.

                        Ich selber habe dazu gelernt: Für statische Seiten genügt wohlgeformtes HTML, für OO-programmierte muss der Objektbaum eben stimmen. Ergo: parsen.

                        Moral: Es sind halt immer mal wieder die kleinen Dummheiten, auf die hinabzusehen es sich nicht lohnt, die den Blick auf die Lösung versperren können... :-)

                        Jetzt habe ich eigentlich erst einmal nur noch ein (klitzekleines) Problemchen, nämlich dass beim Abarbeiten des ersten Formulars, in dem inzwischen Firmendaten vorab erfasst werden, zwar irgendetwas in die Report-Datei übertragen wird, in die entsprechenden Felder aber der Wert "undefined" geschrieben wird.

                        Noch einmal der Link: www.nexus-solutions.de/Mapping/mapping.htm.
                        Vorsicht: Das ganze funktioniert nur bis einschließlich dem Abarbeiten des Formulars "Produktbereich"; "Dokumentart" ist noch nicht bearbeitet.

                        Hilfe wird gerne angenommen.

                        1. Hallo mattfi,

                          es freut mich, dass Du Anregungen aufnimmst (ehrlich !).

                          Jetzt habe ich eigentlich erst einmal nur noch ein (klitzekleines) Problemchen, nämlich dass beim Abarbeiten des ersten Formulars, in dem inzwischen Firmendaten vorab erfasst werden, zwar irgendetwas in die Report-Datei übertragen wird, in die entsprechenden Felder aber der Wert "undefined" geschrieben wird.

                          Ursache in Deiner 'mapping_start.htm':

                          function processForm() {
                          var item_text1 = document.Items.Company.text;
                          var item_text2 = document.Items.eMail.text;
                          passText(item_text1,item_text2);
                          window.open("mapping_00.htm", target="mapping_form");
                          }

                          Meine Vorschlaege:

                          1. Mache Dir klar, dass Variablen, die INNERHALB von Anweisungsbloecken mit dem Schluesselwort 'var' deklariert werden, LOKALE sind - schau mal hier: http://selfhtml.teamone.de/javascript/sprache/variablen.htm#definieren.

                          2. 'text' ist KEINE Eigenschaft eines Formularelementes - schau mal hier: http://selfhtml.teamone.de/javascript/objekte/elements.htm#value.

                          3. Das Fensteroeffnen wolltest Du doch lassen, oder ?

                          Deshalb:

                          function processForm() {
                           item_text1 = document.Items.Company.value;
                           item_text2 = document.Items.eMail.value;
                           passText(item_text1,item_text2);
                          }

                          gruesse
                          rainer groth

                          --
                          ss:| zu:} ls:& fo:) de:] va:| ch:] n4:° rl:? br:$ js:| ie:| fl:( mo:?
                          (--> einer der letzten bauhaeusler <--)
                          1. Hallo Rainer

                            -- wieso sollte ich nicht? Du bist doch hier der Fachmann, nicht ich!

                            es freut mich, dass Du Anregungen aufnimmst (ehrlich !).

                            Danke für deine freundliche Hilfe (= deine mir geschenkte Zeit + Aufmerksamkeit + Wissen). Gott vergelt's.

                            Ursache in Deiner 'mapping_start.htm':

                            1. Mache Dir klar, dass Variablen, die INNERHALB von Anweisungsbloecken mit dem Schluesselwort 'var' deklariert werden, LOKALE sind
                            2. 'text' ist KEINE Eigenschaft eines Formularelementes

                            Und wie soll ich dann das nächste Formularblatt einblenden?

                            1. Das Fensteroeffnen wolltest Du doch lassen, oder ?

                            Gruß,

                            Matthias

                            1. Hallo Matthias,

                              es freut mich, dass Du Anregungen aufnimmst (ehrlich !).
                              -- wieso sollte ich nicht? Du bist doch hier der Fachmann, nicht ich!

                              :-)
                              Sicher sollten Fragende in diesem Forum Anregungen aufnehmen - passiert nur leider nicht immer :-(

                              Danke für deine freundliche Hilfe (= deine mir geschenkte Zeit + Aufmerksamkeit + Wissen). Gott vergelt's.

                              Kein Problem, dafuer bin ich (wie viele Andere) in diesem Forum.

                              1. Das Fensteroeffnen wolltest Du doch lassen, oder ?
                                Und wie soll ich dann das nächste Formularblatt einblenden?

                              Halt im Frame ! SCNR

                              Falls noch Probleme auftauchen:

                              Poste bitte weiter in DIESEM Thread, solange er noch in der Hauptdatei ist (ja, ich weiss, dass DU die </faq/> kennst).

                              gruesse
                              rainer groth

                              --
                              ss:| zu:} ls:& fo:) de:] va:| ch:] n4:° rl:? br:$ js:| ie:| fl:( mo:?
                              (--> einer der letzten bauhaeusler <--)
                2. Hallo Andreas

                  Nur zum Vertändnis:
                  Du möchtest

                  1. aus einem Dokument ein Popup öffnen
                  2. einem Formularfeld im Popupfenster aus dem Hauptdokument heraus einen Wert zuweisen
                  3. im Hauptfenster ein weiteres Dokument öffnen, ohne dass das Popup geschlossen wird
                  4. aus diesem Dokument heraus einen weiteren Wert an das Popup schicken
                  5. die Punkte 3 und 4 mehrfach wiederholen.

                  Exakt. Weil ich aber mehr als den halben Tag auf der Suche nach einer Lösung verbracht habe, habe ich mich inzwischen dafür entschieden, alles in einem neuen Frameset ablaufen zu lassen.

                  Ich denke im Frameset besteht das Zeitproblem nicht mehr, oder?

                  Matthias

        2. ja, denn in dem Moment, in dem Du fragst, existiert das Objekt nicht, weil noch nicht mal das Dokument da ist. Warte ein paar Jahre.

          Ich hab's nochmals ausprobiert:
          Versuch 1: Fehlschlag, da Zieldokument erst in der Ladephase
          Versuch 2: auch Fehlschlag, obwohl Zieldokument inzwischen geladen

          Liegt es also wirklich daran?

          Matthias