lina-: document des Iframes im IE5 für Mac

moin alle :)

Ich habe einen IFrame in einer normalen Seite und innerhalb des Javascripts muss ich auf das document des Iframes zugreifen.
Normalerweise mache ich das mit:

  
iFrameDoc=document.getElementById(id).contentWindow.document  

Das klappt unter IE, Geckos und Mozilla für Mac auch wunderbar. Nur der IE5 für Mac macht Probleme. der sagt mir dass das ContentWindow "undefined" ist.
Ausgabe der Konsole: "document.getElementById(...).contentWindow.document ist keine Objekt"
Die Testausgabe, die ich noch mit reingesetzt habe verrät mir, dass schon contentWindow keinen Wert hat.

Hat jemand eine Idee wie ich in diesem Fall an das document des IFrames komme?

liebe Grüße aus Berlin
lina-

--
Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
  1. Hallo,

    iFrameDoc=document.getElementById(id).contentWindow.document

      
    
    > Hat jemand eine Idee wie ich in diesem Fall an das document des IFrames komme?  
      
    Im Moment habe ich keinen Mac zum Testen, aber probiere mal:  
      
    ~~~javascript
      
    iFrameDoc=frames["IFramename"].document;  
    
    

    ...

      
    <iframe name="IFramename" ...></iframe>  
    
    

    Eventuell testest Du ja auch, ob der Designmode dann im Mac-IE auch funktioniert: https://forum.selfhtml.org/?t=116289&m=744049.

    viele Grüße

    Axel

    1. moin Axel :)

      iFrameDoc=frames["IFramename"].document;

      
      > ...  
      > ~~~html
        
      
      > <iframe name="IFramename" ...></iframe>  
      > 
      
      

      Klappt wunderbar - vielen Dank!

      Eventuell testest Du ja auch, ob der Designmode dann im Mac-IE auch funktioniert: https://forum.selfhtml.org/?t=116289&m=744049.

      Natürlich mach ich das... hab aber keine guten Nachrichten für dich:
      Im IE5 kann man keinen Text eingeben (es kommt allerdings auch von der Konsole keine Fehlermeldung - also wohl kein Javascript-Problem?)

      Und im Safari 1.3.1 wird der IFrame gar nicht erst angezeigt...

      liebe Grüße aus Berlin
      lina-

      --
      Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
      1. Hallo,

        Natürlich mach ich das... hab aber keine guten Nachrichten für dich:
        Im IE5 kann man keinen Text eingeben (es kommt allerdings auch von der Konsole keine Fehlermeldung - also wohl kein Javascript-Problem?)

        Ja, Mac-IEs unterstützen keinen designmode. Das hatte ich wohl verdrängt ;-)).

        Und im Safari 1.3.1 wird der IFrame gar nicht erst angezeigt...

        Gut, danke. Ich werde es selbst testen, wenn ich wieder an einen Mac komme und dann ggf. einen eigenen Thread dazu aufmachen.

        viele Grüße

        Axel

  2. moin alle :)

    Neue Probleme bahnen sich an:
    Jetzt habe ich das gleiche Problem mit Safari :]
    Google hat mir schon verraten, dass hier contentDocument (und nicht contentWindow) einzusetzen ist. Aber auch das funktioniert nicht :(

    ich erhalte für alle möglichen (und unmöglichen) Varianten ein undefined:

      
    alert("doc: "+document.getElementById("cal").contentDocument);  
    alert("win: "+document.getElementById("cal").contentWindow);  
    alert("frames: "+document.frames);  
    alert("document: "+document.getElementById("cal").document);  
    
    

    mein Iframe ist auch nicht so spektakulär:

      
    ...  
    <iframe frameborder="1" scrolling="no" id='cal'  name="iframeCal"  
                   style="position:absolute;width:140px;height:111px;top:10px; margin-left:5px;display:none" >  
    </iframe>  
    ...  
    
    

    hat jemand diesbezüglich Ideen?

    liebe Grüße aus Berlin
    lina-

    --
    Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
    1. moin  :)

      was ich noch herausgefunden habe: es liegt nicht am Konstrukt selber.
      (der extrahierte Teil in einer extra-Datei - das funktioniert)...

      Nun kann ich mir das ganze nur noch so erklären, dass es irgendwas mit DocType (sowas hatte ich mal gelesen), JSP (ja - es handelt sich nicht um html-Seiten) oder dergleichen zu tun hat.

      *wirr* ich seh da nicht mehr durch :(

      liebe Grüße aus Berlin
      lina-

      --
      Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
    2. moin :)

      ich erhalte für alle möglichen (und unmöglichen) Varianten ein undefined:

      alert("doc: "+document.getElementById("cal").contentDocument);
      alert("win: "+document.getElementById("cal").contentWindow);
      alert("frames: "+document.frames);
      alert("document: "+document.getElementById("cal").document);

      
      >   
      > mein Iframe ist auch nicht so spektakulär:  
      > ~~~html
        
      
      > ...  
      > <iframe frameborder="1" scrolling="no" id='cal'  name="iframeCal"  
      >                style="position:absolute;width:140px;height:111px;top:10px; margin-left:5px;display:none" >  
      > </iframe>  
      > ...  
      > 
      
      

      Was habe ich bisher herausgefunden?
      Es lag doch am Iframe - besonders an der CSS-Eigenschaft display:none.
      Ist diese bei JS-Aufruf auf "inline" gesetzt funktioniert es halbwegs.

      Wieso nur halbwegs?
      Ein ganz seltsames Phänomen: beim ersten Kontrollaufruf ist der Wert noch immer undefined. Eine zweite Ausgabe (direkt dahinter) gibt tatsächlich das document-Objekt zurück.
      Dies hat zur Folge, dass im Javascript das document-Objekt _nur_ nach einer vorherigen alert-Anweisung mit dem Objekt sichtbar ist.
      Natürlich habe ich "Dummy-Anweisungen" probiert - aber die haben nicht zu diesem Ergebnis geführt (wirklich nur alert)...

      *wirr* ich versteh das nicht :(
      Vielleicht kann mir die Wand, gegen die ich rede helfen? *G*

      liebe Grüße aus Berlin
      lina-

      --
      Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
      1. Hallo,

        Was habe ich bisher herausgefunden?
        Es lag doch am Iframe - besonders an der CSS-Eigenschaft display:none.
        Ist diese bei JS-Aufruf auf "inline" gesetzt funktioniert es halbwegs.

        Was bringt Dir das, wenn der IFrame doch zunächst unsichtbar sein soll? Hast Du schon visibility:hidden probiert?

        Wieso nur halbwegs?
        Ein ganz seltsames Phänomen: beim ersten Kontrollaufruf ist der Wert noch immer undefined. Eine zweite Ausgabe (direkt dahinter) gibt tatsächlich das document-Objekt zurück.
        Dies hat zur Folge, dass im Javascript das document-Objekt _nur_ nach einer vorherigen alert-Anweisung mit dem Objekt sichtbar ist.
        Natürlich habe ich "Dummy-Anweisungen" probiert - aber die haben nicht zu diesem Ergebnis geführt (wirklich nur alert)...

        Wann läuft das JavaScript? Läuft es bereits während des Aufbaus der Seite oder als Funktion window.onload oder body.onload? Du kannst den IFrame natürlich erst ansprechen, wenn er gerendert wurde.

        viele Grüße

        Axel

        1. moin Axel :)

          Was bringt Dir das, wenn der IFrame doch zunächst unsichtbar sein soll? Hast Du schon visibility:hidden probiert?

          Klar habe ich das probiert - aber das kann ich nicht verwenden, weil der Platzhalter stört :( das Iframe überlager kurzzeitig anderen Inhalt.
          Es bringt mir in sofern was, als dass ich die Anweisung, wann das Iframe sichtbar werden soll im Java-script nach vorne setzen kann (also noch vor die Anweisung mit dem documentContent). Somit gehts ja dann :)

          Wann läuft das JavaScript? Läuft es bereits während des Aufbaus der Seite oder als Funktion window.onload oder body.onload? Du kannst den IFrame natürlich erst ansprechen, wenn er gerendert wurde.

          Das Script wird erst nach einem Klick auf einen Button ausgeführt. Somit ist das IFrame auch schon geladen (der Test mit der "Sofort-Sichtbarkeit" hat mir das ja auch schon gezeigt)

          liebe Grüße aus Berlin
          lina-

          --
          Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
          1. Hallo,

            Es bringt mir in sofern was, als dass ich die Anweisung, wann das Iframe sichtbar werden soll im Java-script nach vorne setzen kann (also noch vor die Anweisung mit dem documentContent). Somit gehts ja dann :)
            Das Script wird erst nach einem Klick auf einen Button ausgeführt. Somit ist das IFrame auch schon geladen (der Test mit der "Sofort-Sichtbarkeit" hat mir das ja auch schon gezeigt)

            Kann man das irgendwo mal online betrachten?

            Sonst muss ich Dich jetzt fragen, ob per Buttonclick in _einem_ JavaScript-Ablauf zunächst der IFrame von display:none auf display:inline gesetzt wird, wodurch er beginnt seine src zu laden, und dann im selben Ablauf versucht wird das Dokument in diesem IFRame zu referenzieren?

            viele Grüße

            Axel

            1. moin Axel :)

              Kann man das irgendwo mal online betrachten?

              leider nicht :( Darf ich nicht, da das nicht öffentlich wird sondern nur für unsere Kunden.

              Sonst muss ich Dich jetzt fragen, ob per Buttonclick in _einem_ JavaScript-Ablauf zunächst der IFrame von display:none auf display:inline gesetzt wird, wodurch er beginnt seine src zu laden, und dann im selben Ablauf versucht wird das Dokument in diesem IFRame zu referenzieren?

              Ähm... ja! (musste erst ein paar mal lesen, bevor ich verstanden habe *breitgrins* zeit für feierabend!)

              Es gibt einen Button der immer zu sehen ist. Klickt der User dadrauf wird der Iframe sichtbar gemacht (angelegt ist er schon vorher mit der css-Eigenschaf display:none). Im quasi selben Atemzug wird in diesem Iframe eine Tabelle dynamsich erstellt. (dafür brauche ich das document-Objekt)

              du meinst es könnte daran liegen, dass der frame erst bei der anzeige seine src lädt? (den er ja noch nich mal hat)
              Wie verhält es sich denn in diesem Fall? Also das document-Objekt ist quasi leer.
              ahh.. wie ich grad so meine Fragen stelle - kann es sein, dass ich das explizit anlegen muesste? Wenn ja - wie mach ich denn sowas?

              liebe Grüße aus Berlin
              lina-

              --
              Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
              1. Hallo,

                Kann man das irgendwo mal online betrachten?
                leider nicht :( Darf ich nicht, da das nicht öffentlich wird sondern nur für unsere Kunden.

                Gut, dann werden wir uns ein Testszenario erarbeiten müssen:

                <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                        "http://www.w3.org/TR/html4/loose.dtd">
                <html>
                <head>
                <title>IFrame</title>
                <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
                <script type="text/javascript">
                <!--
                function beschreibeIFrame() {
                  document.getElementById("test").style.display="inline"

                var myIFrame = window.frames["test"];
                  myIFrame.document.open();
                  myIFrame.document.write("<h1>Test</h1>");
                  myIFrame.document.close();
                }
                //-->
                </script>
                </head>
                <body>
                <iframe id="test" name="test" width="200" height="200" style="display:none" src="leer.html"></iframe>
                <button onclick="beschreibeIFrame()">beschreibe den IFrame</button>
                </body>
                </html>

                Was daran funktioniert im Safari nicht? Ich habe nicht die Möglichkeit, einen zu nutzen, habe aber bisher auch nicht gehört, dass er die frames-collection nicht beherrscht.

                Beim Testen im FireFox habe ich allerdings gesehen, dass Sicherheits-Informationen erzeugt werden, wenn man die src leer lässt. Das hat damit zu tun, dass FireFox das
                http://www.w3.org/TR/html4/present/frames.html#h-16.5
                 src         %URI;          #IMPLIED
                wohl so interpretiert, dass bei fehlendem src im IFRame der selbe URI referenziert wird, wie im parent-Window. Die Meldung war:

                Sicherheitsfehler: Inhalt auf [URI1] darf [URI1] nicht laden oder verlinken.

                Deshalb die leer.html in der src des IFrames.

                viele Grüße

                Axel

                1. moin Axel :)

                  Du bist ein Schatz! *knutscha*
                  ich Depp hatte ja auch versucht _document_.frames anzusprechen ;)
                  klar - deine Variante mit _window_frames funzt super! Ausserdem habe ich ja auch nicht das document.open() und .close() drinnen gehabt (wusste ich gar nicht, dass man das machen muss)...

                  Vielen Vielen vielen Dank!
                  Hast meinen Feierabend gerettet :)

                  Jetzt werd ich mich mal dem IE5/Mac zuwenden *grusel*

                  PS: das src="leer.html" darf man ruhig weglassen - bei mir hat jedenfalls keiner der bisher getesteten Browser gemeckert (IE6/Win, Geckos, Opera, Safari)

                  liebe Grüße aus Berlin
                  lina-

                  --
                  Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)