31
Я.Субботник, Новосибирск, 19 ноября 2011 года Разработчик интерфейсов Николай Сиварев Приручая сайты

Николай Сиварев "Приручая сайты"

  • Upload
    yandex

  • View
    286

  • Download
    6

Embed Size (px)

DESCRIPTION

Николай Сиварев "Приручая сайты" Я.Субботник в Новосибирске О докладе: В Метрике есть карта кликов, карта ссылок, плеер Вебвизора – всё это веб-приложения, которые поверх произвольной страницы в интернете показывают какие-то данные. Рассказ пойдет о нескольких подходах к созданию таких приложений, достоинствах и недостатках каждого подхода.

Citation preview

Page 1: Николай Сиварев "Приручая сайты"

Я.Субботник,  Новосибирск,  19  ноября  2011  года  

Разработчик  интерфейсов  Николай  Сиварев  

Приручая  сайты  

Page 2: Николай Сиварев "Приручая сайты"

 

•  Есть  произвольная  страница  в  интернете  

•  Необходимо  на  ней  что-­‐то  показать  

Формулировка  задачи  

2  

Page 3: Николай Сиварев "Приручая сайты"

Вебвизор  

3  

Page 4: Николай Сиварев "Приручая сайты"

Карта  ссылок  

4  

Page 5: Николай Сиварев "Приручая сайты"

Терминология  

•  Страница,  на  которой  показываем  данные  —  страница-­‐жертва.  

•  Наш  скрипт,  подключаемый  на  страницу-­‐жертву  —  вирус.  

5  

Page 6: Николай Сиварев "Приручая сайты"

6  

Page 7: Николай Сиварев "Приручая сайты"

Подгрузка  скрипта  

Как  задетектить  режим  приложения?    

•  Признак  в  GET  параметрах  •  Признак  внутри  #hash  •  Признак  в  window.name  

7  

Page 8: Николай Сиварев "Приручая сайты"

Подгрузка  скрипта  

window.open('hhp://site.ru/',  'MyName');  

<a  href='hhp://site.ru/'    target='MyName'>link</a>  

<iframe  src='hhp://site.ru/'  name='MyName'></iframe>  

8  

Как  задать  window.name?  

Page 9: Николай Сиварев "Приручая сайты"

Подгрузка  скрипта  

Какой  скрипт  грузить?    

•  Несколько  приложений  •  Несколько  локалей  •  Загрузка  dev-­‐версии  

9  

Page 10: Николай Сиварев "Приручая сайты"

Подгрузка  скрипта  

Указание  пути  к  скрипту    

•  В  GET  параметрах  •  В  #hash  •  В  window.name  

 

Обязательно  проверить  на  корректность!  

10  

Page 11: Николай Сиварев "Приручая сайты"

Подгрузка  скрипта  

var s = document.createElement('script');

s.type = 'text/javascript';

s.src = scriptUrl;

var head = document.getElementsByTagName('head')[0];

head.insertBefore(s, head.firstChild);

11  

Page 12: Николай Сиварев "Приручая сайты"

12  

Page 13: Николай Сиварев "Приручая сайты"

Проблемы  

 

•  Общее  пространство  JavaScript  •  Общий  CSS  •  Общий  DOM  

13  

Page 14: Николай Сиварев "Приручая сайты"

Подгрузка  скрипта  

var s = document.createElement('script');

s.type = 'text/javascript';

s.src = scriptUrl;

var head = document.getElementsByTagName('head')[0];

head.insertBefore(s, head.firstChild);

14  

Page 15: Николай Сиварев "Приручая сайты"

Создаём  iframe  

var div = document.createElement('div');

div.innerHTML = '<iframe name="MyName" allowtransparency="true" frameborder="0"></iframe>';

var iframe = div.firstChild;

document.body.appendChild(iframe);

15  

Page 16: Николай Сиварев "Приручая сайты"

Подключаем  скрипт  в  iframe  

var iframeDoc = iframe.contentWindow.document;

iframeDoc.open();

iframeDoc.write('<!doctype html>');

iframeDoc.write('<html><head>');

iframeDoc.write('<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />');

16  

Page 17: Николай Сиварев "Приручая сайты"

Подключаем  скрипт  в  iframe  

iframeDoc.write('</head><body>');

iframeDoc.write('<script src="' + scriptPath + '"></script>');

iframeDoc.write('</body></html>');

iframeDoc.close();

17  

Page 18: Николай Сиварев "Приручая сайты"

18  

Page 19: Николай Сиварев "Приручая сайты"

Достоинства  

•  Полностью  изолированный  JavaScript  

•  Частично  изолированный  CSS  

•  Частично  изолированный  DOM  

19  

Page 20: Николай Сиварев "Приручая сайты"

Недостатки  

•  CSS  всё  ещё  частично  общий  

•  DOM  всё  ещё  частично  общий  

•  Интерфейс  в  ифрейме  ограничен  рамками  ифрейма  

20  

Page 21: Николай Сиварев "Приручая сайты"

21  

Page 22: Николай Сиварев "Приручая сайты"

Достоинства  

•  Полностью  изолированы  и  JavaScript,  и  CSS,          и  DOM.  

 

 

Бонус  •  Сайт  превратился  в  скриншот  

22  

Page 23: Николай Сиварев "Приручая сайты"

Ещё  проблемы  

Общение  с  родным  сервером    

•  JSONP  •  Кроссдоменный  XMLHhpRequest  

 

Плохо?  

23  

Page 24: Николай Сиварев "Приручая сайты"

Ещё  проблемы  

 

•  Невозможно  контролировать  процесс  загрузки  приложения  

24  

Page 25: Николай Сиварев "Приручая сайты"

Ещё  проблемы  

 

•  Невозможно  перезагрузить  исследуемую  страницу  без  перезагрузки  интерфейса  

25  

Page 26: Николай Сиварев "Приручая сайты"

26  

Page 27: Николай Сиварев "Приручая сайты"

27  

Page 28: Николай Сиварев "Приручая сайты"

Кроссдоменное  общение  

targetWin.postMessage('message', '*');

window.onmessage = function(message) {

// ...

};

 

postMessage  в  IE  синхронна!  

28  

Page 29: Николай Сиварев "Приручая сайты"

…  но  

•  Страница,  выпрыгивающая  из  фрейма,  выпрыгнет  из  нашего  приложения.  

•  IE  не  младше  8-­‐й  версии  

29  

Page 30: Николай Сиварев "Приручая сайты"

Резюме  

 

 

Идеального  варианта  нет!  

30  

Page 31: Николай Сиварев "Приручая сайты"

Разработчик  интерфейсов  

 

sivarev@yandex-­‐team.ru  

Николай  Сиварев