Stukje Javascript

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Piet Jansen

Piet Jansen

11/03/2012 19:54:59
Quote Anchor link
Beste mensen,

Ik kom dit tegen in de source van Twitter, maar ik snap het nut er niet zo van. De document.domain wel, maar waarom hebben ze deze stukjes Javascript erin gezet?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
document.domain = 'twitter.com';

  // this will be copied to twttr.appStartTime once our JS has started up
  document.startTime = new Date().getTime();
  var twttr = {};
  twttr.versionName = 'phoenix';
  twttr.isT1 = true;
  twttr.didPingKeynote = false;
  twttr.keynoteTTFTPing = function() {
    if (!twttr.didPingKeynote && window.location.href.indexOf('keynoteTest') > 0) {
      var image = document.createElement('img');
      image.src = '/images/keynote.gif';
      twttr.didPingKeynote = true;
    }
  }

  if(!window.console){(function(){var B=["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];window.console={};for(var A=0;A<B.length;++A){window.console[B[A]]=function(){}}}())};


en

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<script>
function bust () {
  document.write = "";
  window.top.location = window.self.location;
  setTimeout(function() {
    document.body.innerHTML = '';
    }, 0);
  window.self.onload = function(evt) {
    document.body.innerHTML = '';
  };
}
if (window.top !== window.self) { // are you trying to put self in an iframe?
  try {
    if (window.top.location.host) { // this is illegal to access unless you share a non-spoofable document domain
      // fun times
    } else {
      bust(); // chrome executes this
    }
  } catch (ex) {
    bust(); // everyone executes this
  }
}
</script>


Wie kan dit een beetje uitleggen? De comments zijn wel grappig, maar de rest?
 
PHP hulp

PHP hulp

25/11/2024 00:57:26
 
Nick Dijkstra

Nick Dijkstra

11/03/2012 20:17:21
Quote Anchor link
De eerste durf ik ook niet te zeggen, maar volgens mij is de 2de als iemand twitter in een iframe zet dat hij de iframe leeg haalt en twitter opent in het zelfde scherm.
 
Wouter J

Wouter J

11/03/2012 20:29:44
Quote Anchor link
Aah, kijken in de source van systemen als Twitter, Facebook of Hyves o.i.d. doet je vaak niet heel veel goed. Niet heel mooi gescript vaak.

Maar hier zitten wel wat leuke dingetjes tussen. Het eerste scriptblok:
Regel 4 - Hierin leggen ze het tijdstip vast dat jij de pagina voor je neus kreeg
Regel 5 - 15 - Beetje oninteressant. Ze geven hier een twttr (waarschijnlijk van twitter ;)) object wat waardes mee en zeggen dat als didPingKeynote true is en als de URL keynoteTest bevat er een afbeelding gemaakt wordt (regel 12 en 13). Beetje vreemd is dat deze afbeelding niet in de DOM wordt toegevoegd, lijkt dus alsof dit een scriptje is waarmee ze iets testen.
Regel 17
Zeer belangrijk en handig scriptje.
Met de console object kun je in moderne browsers variabele loggen naar de JS console en hiermee heel handig debuggen. Ook heeft het andere handige functies, zeker het proberen waard!
Alleen oude browsers hebben dit niet en zullen een error geven. En als je in JS 1 error krijgt werkt het hele script niet meer, dit wil je niet en daarom hebben ze dit scriptje gemaakt. Als je het uit pakt krijg je dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
if(!window.console) {
    (function(){
        var B = ["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];
        window.console = {};
        for( var A = 0; A < B.length; ++A ) {
            window.console[B[A]] = function() { };
        }
    }())
};

De variabele B bevat alle mogelijk functies van de console object en doormiddel van een for loop geven ze de console object al deze functies mee. Omdat het lege functies zijn gebeurd er niks, maar er wordt ook geen error gegeven (!!).
Merk ook op dat je op regel 1 de controle ziet of console bestaat, als het bestaat willen we natuurlijk gewoon het echte console object gebruiken.


Het 2e scriptblok is gewoon 1 scriptje die ook wel handig is. Hiermee voorkomen ze dat je ze hun site opneemt in een iframe. De functie bust haalt de hele DOM leeg, zodat je niks ziet.
Zodra window.top niet gelijk is aan window.self (als je in een iframe zit verwijst top volgens mij naar de pagina waarin het iframe zit en self naar de src van het iframe) weet je dat je je in een iframe bevind en dan roepen ze de bust functie aan en halen ze dus de hele pagina leeg.
Met regel 3 zorgen ze dat je direct wordt door gelinkt naar de twitter website.
Gewijzigd op 11/03/2012 20:31:35 door Wouter J
 
Piet Jansen

Piet Jansen

11/03/2012 23:19:46
Quote Anchor link
Bedankt voor de reacties! Het stukje voor de iframe heb ik zojuist in mijn site gezet en het werkt prima! Er wordt netjes doorgelinkt naar de site zelf.

Heel erg bedankt voor jullie tijd!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.