Stukje Javascript
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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(){}}}())};
// 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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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>
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?
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.
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 tw
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)
1
2
3
4
5
6
7
8
9
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() { };
}
}())
};
(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
Heel erg bedankt voor jullie tijd!