Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 

четверг, 18 февраля 2010 г.

Информеры, или как сылаться на свой сайт

Не так давно навешал на свой блог пару счетчиков. Некоторые счетчики предоставлялись с ссылками ведущими с моего сайта. Чтобы лишних линков С сайта не было, я попробовал эти теги удалить. Часть счетчиков осталась рабочей, а часть перестала работать. "Как так?" подумал я. Теперь я это знаю.
Читаем дальше...

Пару дней назад возникла задача - реализовать так называемые "информеры". Принцип тот же что и у счетчиков. Клиент приходит на сайт, выбирает нужные настройки информера, копирует код и вставляет его в свой блог/сайт. Счетчик считает количество заходов на сайт, а информер показывает некую информацию.

В задачу так же входила реализация обратного линка на сайт. То есть код для вставки должен был выглядеть приблизительно следующим образом:
<!-- informer START -->
<a id="link_to_my_site" 
   href="http://bla.bla.bla/?mod=informers¶m=1">
    <iframe id="informer_iframe" width="250px" height="200px" 
            src="href="http://bla.bla.bla/?mod=informers¶m=1">
    </iframe>
</a>
<!-- informer END -->
iframe использовался потому, что необходимо было вставить страничку, которая рисует график на стороне клиента.

Но клиент может удалить ссылку и ничего ему не будет.
<!-- informer START -->
<iframe id="informer_iframe" width="250px" height="200px"
        src="href="http://bla.bla.bla/?mod=informers¶m=1"></iframe>
<!-- informer END -->
Может, если мы не сделаем в скрипте построения графика такую штуку
buildChart = function(containerId) {
    var tagA = window.parent.document.getElementById("link_to_my_site");
    if (!tagA || (tagA.href.indexOf('http://bla.bla.bla/') != 0)) return; 

    // тут строится график
}
buildChart('main');
С помощью строчки
window.parent.document.getElementById("link_to_my_site")
мы получаем наш тег А, содержащий линк на наш сайт. Если его там нет, или линк не тот мы просто выходим из функции которая строит информер.

Есть и другие варианты. К примеру, один поисковик предлагает вставить такой текст.
<!-- begin of code -->
<script id="BlaBlaCounter" 
        src="http://bla.bla.bla/calc.jcn?1233456" 
        type="text/javascript"></script>
<noscript>
    <img border="0" alt="Bla Bla Bla Calculator" width="81"
         src="http://bla.bla.bl/calc.cnt?1233456" height="63"/>
</noscript>
<!-- end of code -->
В подходящий момент вызывается скрипт, который делает вот что
<!-- begin of code -->
<script type="text/javascript" id="BlaBlaCounter"
        src="http://bla.bla.bla/calc.jcn?1233456">
    with (c_image = new Image()){
        src = 'http://bla.bla.bla/calc.scn?1233456';
        border = 0;
        alt = 'Bla Bla Bla Calculator';
        width = 81;
        height = 63
    }
    with (c_link = document.createElement('a')) {
        href='http://bla.bla.bla/home?1233456';
        target='_blank';
        appendChild(c_image);
    }
    document.getElementById("BlaBlaCounter").parentNode.appendChild(c_link); 
</script>
<a href="http://bla.bla.bla/home?1952968" 
   target="_blank">
    <img height="63" border="0" width="81" 
         src="http://bla.bla.bla/calc.scn?1233456" 
         alt="Bla Bla Bla Calculator">
</a>
<noscript>
    <img border="0" alt="Bla Bla Bla Calculator" width="81" 
        src="http://bla.bla.bla/calc.cnt?1233456" height="63"/>
</noscript>
<!-- end of code -->
а именно в контейнер, содержащий скрипт подклеивает линк со вложенным в него рисунком (что ниже по тексту можно наблюдать).

В ответ на эту самовольность можно написать свой скрипт, который вслед за добавлением линков разработчиками счетчика/информера, аккуратно их поудаляет. Только если где-то в глубине скрипта не будет зарыта проверочка ;)

1 комментарий:

  1. Спасибо за идею! Хотелось и ссылочку сохранить и iframe использовать.

    ОтветитьУдалить