Pull to refresh

Интеграция вкусностей jQuery в другие сайты

Reading time4 min
Views2.4K
Есть у меня небольшой проект с user-generated content-ом. Встала задача сделать код кнопки с ссылкой на страничку пользователя, для интеграции в пользовательские блоги и сайты. Но делать скучные кнопки, как у большинства конкурентов, не хотелось. Хотелось, на равне с простыми кнопками и ссылками, сделать что-то особенное, jQuery-евское, с аяксом и анимацией :).

Суть простая: пользователь размещает у себя на сайте скрипт, который динамически вставляет кнопку. При нажатии на кнопку всплывает окошко с подгружённой пользовательской страничкой с нашего ресурса.

Проблемы очевидны:
  1. Необходимо определить, используется ли jQuery и нужный плагин на сайте пользователя. Если нет, то обоих динамически подгрузить. Делать отдельно коды для тех кто использует jQuery на своем сайте и для тех кто нет — не комильфо, а тем более подгружать при любом раскладе (могут возникнуть глюки, особенно у плагинов).
  2. Пережатый jQuery весит около 60 кБ, и в случае подкачки может не успеть полностью загрузиться и инициализироваться до исполнения кода.

В качестве вкусности я использовал плагин fancybox. Он позволяет не только отображать фотографии с lightbox-эффектом, но и любой другой контент в iframe.

Ниже представлен код.

Код для вставки пользователями в свои сайты выглядит примерно так:
  1. <script type='text/javascript'>var ExtendVar='ExtendVar';</script>
  2. <script type='text/javascript' src='http://MySite.ru/js/script.js'></script>

В script.js пишем следующее:
  1. new MyClass(ExtendVar);
  2.  
  3.  
  4. function MyClass(ExtendVar) {
  5.         this.ExtendVar = ExtendVar;
  6.  
  7.         if (this.ExtendVar) {
  8.  
  9.                 document.write("<a class='iframe fancy' href='http://MySite.ru/"+this.ExtendVar+"' title='MySite.ru/"+this.ExtendVar+"' target='_blank'><img src='http://MySite.ru/img/dezign/MyButton.png' style='border:0 none; position:relative;' alt='MySite.ru' /></a>"); // Вставляем свою кнопку
  10.                
  11.                 // Проверяем, используется ли jQuery на данном сайте
  12.                 if (typeof(jQuery) == 'undefined') { // Если нет, то подключаем
  13.                         var JQ = document.createElement('script');
  14.                         JQ.src = 'http://MySite.ru/js/jquery.js';
  15.                         JQ.type = 'text/javascript';
  16.                         document.getElementsByTagName('head')[0].appendChild(JQ);
  17.                 }
  18.        
  19.                 waitJQ(); // Ожидаем подзагрузки и инициализации jQuery
  20.         };
  21.  
  22.  
  23.         function waitJQ() {
  24.                 if (typeof(jQuery) == 'undefined') {
  25.                         window.setTimeout(waitJQ, 100); // Рекурсия каждые 100 миллисекунд, пока не загрузиться jQuery
  26.                 }
  27.                 else {
  28.                         // После успешного определения jQuery проверяем, используется ли нужный нам плагин на данном сайте (в данном случае fancybox)
  29.                         if (typeof(jQuery.fn.fancybox) == 'undefined') { // Если нет, то подключаем
  30.                                 jQuery("head").append("<script type='text/javascript' src='http://MySite.ru/js/fancybox.js'></script><link rel='stylesheet' href='http://MySite.ru/css/fancybox.css' type='text/css' media='screen' />");
  31.                         }
  32.  
  33.                         waitFB(); // Ожидаем подзагрузки и инициализации плагина fancybox
  34.                 }
  35.         }
  36.  
  37.  
  38.         function waitFB() {
  39.                 if (typeof(jQuery.fn.fancybox) == 'undefined') {
  40.                         window.setTimeout(waitFB, 100); // Рекурсия каждые 100 миллисекунд, пока не загрузиться fancybox
  41.                 }
  42.                 else {
  43.                         jQuery('a.fancy').fancybox({frameHeight:190, frameWidth:350}); // Собственно инициализация эффекта
  44.                 }
  45.         }
  46. }

Пример можно посмотреть на сайте MoiaVizitka.ru. Если кому пригодится, буду рад.
Tags:
Hubs:
+25
Comments66

Articles