ТЗ на разработку JS-кода
Требуется разработать 3-rd party Javascrtip, загружающий рекламный контент с сервера и отображающий его в контейнере на сайте паблишера.
Initial Tag – это HTML-код, в котором задаются параметры кампании, отображается проверочный нулевой пиксел и выполняется загрузка основного JS-файла. Этот код вставляется в контейнер на сайте паблишера, в котором нужно будет отобразить баннер.
Loaded Javascript – загруженный через Inital Tag код Javascript. Он выполняет следующие функции.
A. Определяет параметры web-страницы, на которую он загружен (location, referrer и другие детекты).
B. Объединяет детекты с параметрами кампании, заданными в Initial Tag в виде объекта javascript. Имя объекта задается в самом JS в виде константы.
В итоге в исходный объект добавляются свойства location, referer (без двойной r), а также свойства d1,..dn, которые соответствуют собранным детектам.
C. Упаковывает получившийся объект, преобразуя его в формат JSON и кодируя в base64.
D. Определяет свое местоположение в контейнере на странице паблишера (через Initial Tag или положение проверочного пиксела).
E. Создает IFRAME и вставляет его контейнер. В IFRAME передаются закодированные данные в формате: <iframe src="//server-domain.com?encoded_json"> , где encoded_json – это строка, полученная в пункте C.
Домен (//server-domain.com) задается внутренней переменной в JS-коде через шаблонизатор. Т.е. в самом js-коде должна быть создана константа, в которой задается домен сервера.
Creative IFRAME – это IFRAME, в котором отображается баннер. Должен иметь нулевой бордер, и размеры, которые равны размеру баннера. Размеры баннера задаются в параметрах кампании, в свойстве size, в виде строки формата WxH (728x300). При необходимости, можно динамически создать дополнительный контейнер для корректного отображения баннера.
Creative Provider Server – это сервер, который загружает рекламный контент в IFRAME.
Пример Initial Tag
<!-- Tracking Pixel -->
<img src="domain.com?tracking=47" style="display:none">
<!-- Ad. parameters -->
<script>test47586271fc784ae = {"p":"test47586271fc784ae"," size":"250x310"};</script>
<!-- JS-loader -->
<script>(function(){var s=document.createElement('script');s.src ='domain.com/t4756d90738b2e... e=document.getElementsByTagName('script' )[0];e.parentNode.insertBefore(s,e);})();</scri pt>
Пример JS
(function(d, w, nav, undefined) {
"use strict";
// Creative Provider domain
var server = '//domain.com';
// advertizing object
var ap = w['test47586271fc784ae'];
// detect tracking pixel location
var tracker = (function () {
var imgs = document.getElementsByTagName('img');
for (var i=0; i<imgs.length; i++) {
if (imgs[i].getAttribute('src').indexOf(ser ver) != -1) {
return imgs[i];
}
}
})();
// Add detections to ad. object
var data = (function () {
var r = {
domain: '%domain%',
}
if (w.location!=w.top.location) {
var value = d.referrer && d.referrer !== '' ? d.referrer : w.location;
r.referer = value;
r.location = value;
}
else {
r.referer = d.referrer;
r.location = w.location;
}
for (var p in ap) {
r[p] = ap[p];
}
return r;
})();
// Detect ad. container
var container = tracker.parentNode;
if (!container || container.tagName == 'HEAD') {
container = d.getElementsByTagName('body')[0];
}
// Parse size parameter to detect banner size
var sizes = ap.size.split('x');
// Create IFRAME with additional container and add to publisher webpage
var div = d.createElement('div');
div.setAttribute("style", "border:0;width:"+sizes[0]+"px;heig ht:"+sizes[1]+"px;margin:0;padding:0;" )
var creative = d.createElement('iframe');
creative.setAttribute("src", server + '?' + encodeURIComponent(btoa(JSON.stringify(data))));
//creative.style.width = sizes[0]+"px";
//creative.style.height = sizes[1]+"px";
creative.setAttribute("width", "100%");
creative.setAttribute("height", "100%");
creative.setAttribute("frameBorder", 0);
creative.setAttribute("border", 0);
creative.setAttribute("scrolling", "no");
creative.setAttribute("allowtransparency" , "true");
creative.setAttribute("style", "border:0;width:100%;height:100%");
div.appendChild(creative);
container.appendChild(div);
})(document, window, navigator);
полное ТЗ здесь –
https://docs.google.com/document/d/1...LoETisgM/edit#
За данный скрипт плачу 200-250$ работа не сложная. Все кто заинтересован пишите в личку оставляйте контакты