Ralph: Was tut diese Funktion?

Hallo liebe Selfer,

ich werde aus dieser Funktion nicht wirklich schlau! Könnt ihr mir sagen, was sie tut?

function checkTopFrame()  
{  
 if (frames && frames[0] && frames[0].document)  
 {  
  try  
  {  
   frames[0].document.domain;  
  }  
  catch(e)  
  {  
   location = "/error";  
  }  
  self.setTimeout('checkTopFrame()', 3000);  
 }  
}  
self.setTimeout('checkTopFrame()', 3000);

Die Funktion entstammt der Google-Bildersuche: wenn man dort ein Ergebnis öffnet, ist die entsprechende Seite mit einem Frame verziert. So wie bspw. hier.

Nur, was tut sie?

Ralph

  1. Mahlzeit Ralph,

    ich werde aus dieser Funktion nicht wirklich schlau! Könnt ihr mir sagen, was sie tut?

    frames[0].document.domain;

    Das kenne ich nicht. Anscheinend handelt es sich um irgendwas Google-spezifisches. Und wenn der Aufruf nicht klappt, wird halt auf eine Fehler-URL weitergeleitet:

    catch(e)
      {
       location = "/error";
      }

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hi,

      Das kenne ich nicht. Anscheinend handelt es sich um irgendwas Google-spezifisches.

      document.domain (offiziell nur lesbar, praktisch auch beschreibbar).

      Gruß, Cybaer

      --
      Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
      (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
  2. Hi,

    if (frames && frames[0] && frames[0].document)

    Existieren frames-Objekt, der erste Frame und ein Dokument im ersten Frame?

    Wenn ja:

    frames[0].document.domain;

    Auf Domainnamen dieses Dokuments zugreifen.

    Und wenn Zugriff scheitert (weil sich das Dokument auf einem anderen Server befindet (Same-Origin-Policy):

    location = "/error";

    "Fehlerseite" laden

    self.setTimeout('checkTopFrame()', 3000);

    Test 3 Sekunden nach dem letzten Test wiederholen.

    Nur, was tut sie?

    Verhindern, daß dem User im ersten Frame unbemerkt ein Dokument untergejubelt wird, das gar nicht von Google stammt.

    Gruß, Cybaer

    --
    Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
    (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
    1. Hi Cybaer,

      verdammt, ich hatte doch hier gestern super ausfuehrlich gedankt, und noch alles moegliche dazu geschrieben. Tja, Speichern vergessen, oje...

      Jedenfalls danke! Letztlich hat sich rausgestellt, dass sich die Google-Frames nicht beeinflussen lassen. Ich hab's jetzt per JS-Weiterleitung und mit verschiedenen Tricks gelöst. Scheint alles zu passen :-)

      Danke nochmal, vor allem fuer den Hinweis auf die Same-Origin-Policy!
      Ralph