syncframe.html
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>4chan</title> 5 </head> 6 <body> 7 <script> 8 var SyncFrame = { 9 init: function() { 10 if (window.self === window.parent) { 11 return; 12 } 13 14 this.remoteOrigin = location.protocol + '//boards.' 15 + (location.host === 'boards.4channel.org' ? '4chan' : '4channel') 16 + '.org'; 17 18 this.domain = location.host.replace(/^boards\./, ''); 19 20 window.addEventListener('message', this.onMessage, false); 21 22 window.parent.postMessage('ready', this.remoteOrigin); 23 }, 24 25 onMessage: function(e) { 26 var self = SyncFrame; 27 28 if (e.origin !== self.remoteOrigin) { 29 return; 30 } 31 32 if (!e.data) { 33 return; 34 } 35 36 if (e.data.storage) { 37 self.setStorage(e.data.storage); 38 } 39 40 if (e.data.cookie) { 41 self.setCookie(e.data.cookie); 42 } 43 }, 44 45 setStorage: function(data) { 46 for (var key in data) { 47 if (data[key] === null) { 48 localStorage.removeItem(key); 49 } 50 else { 51 localStorage.setItem(key, data[key]); 52 } 53 } 54 }, 55 56 setCookie: function(data) { 57 var domain, path, date, self; 58 59 self = SyncFrame; 60 61 date = new Date(); 62 63 date.setTime(date.getTime() + (data.days * 24 * 60 * 60 * 1000)); 64 65 if (!data.domain) { 66 domain = self.domain; 67 } 68 else { 69 domain = data.domain + self.domain; 70 } 71 72 if (!data.path) { 73 path = '/'; 74 } 75 else { 76 path = data.path; 77 } 78 79 document.cookie = data.name + '=' + data.value 80 + '; expires=' + date.toGMTString() 81 + '; path=' + path + '; domain=' + domain; 82 } 83 }; 84 85 SyncFrame.init(); 86 </script> 87 </body> 88 </html>