Есть у меня небольшой проект с user-generated content-ом. Встала задача сделать код кнопки с ссылкой на страничку пользователя, для интеграции в пользовательские блоги и сайты. Но делать скучные кнопки, как у большинства конкурентов, не хотелось. Хотелось, на равне с простыми кнопками и ссылками, сделать что-то особенное, jQuery-евское, с аяксом и анимацией :).
Суть простая: пользователь размещает у себя на сайте скрипт, который динамически вставляет кнопку. При нажатии на кнопку всплывает окошко с подгружённой пользовательской страничкой с нашего ресурса.
Проблемы очевидны:
В качестве вкусности я использовал плагин fancybox. Он позволяет не только отображать фотографии с lightbox-эффектом, но и любой другой контент в iframe.
Ниже представлен код.
Код для вставки пользователями в свои сайты выглядит примерно так:
В script.js пишем следующее:
Пример можно посмотреть на сайте MoiaVizitka.ru. Если кому пригодится, буду рад.
Суть простая: пользователь размещает у себя на сайте скрипт, который динамически вставляет кнопку. При нажатии на кнопку всплывает окошко с подгружённой пользовательской страничкой с нашего ресурса.
Проблемы очевидны:
- Необходимо определить, используется ли jQuery и нужный плагин на сайте пользователя. Если нет, то обоих динамически подгрузить. Делать отдельно коды для тех кто использует jQuery на своем сайте и для тех кто нет — не комильфо, а тем более подгружать при любом раскладе (могут возникнуть глюки, особенно у плагинов).
- Пережатый jQuery весит около 60 кБ, и в случае подкачки может не успеть полностью загрузиться и инициализироваться до исполнения кода.
В качестве вкусности я использовал плагин fancybox. Он позволяет не только отображать фотографии с lightbox-эффектом, но и любой другой контент в iframe.
Ниже представлен код.
Код для вставки пользователями в свои сайты выглядит примерно так:
- <script type='text/javascript'>var ExtendVar='ExtendVar';</script>
- <script type='text/javascript' src='http://MySite.ru/js/script.js'></script>
В script.js пишем следующее:
- new MyClass(ExtendVar);
-
-
- function MyClass(ExtendVar) {
- this.ExtendVar = ExtendVar;
-
- if (this.ExtendVar) {
-
- 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>"); // Вставляем свою кнопку
-
- // Проверяем, используется ли jQuery на данном сайте
- if (typeof(jQuery) == 'undefined') { // Если нет, то подключаем
- var JQ = document.createElement('script');
- JQ.src = 'http://MySite.ru/js/jquery.js';
- JQ.type = 'text/javascript';
- document.getElementsByTagName('head')[0].appendChild(JQ);
- }
-
- waitJQ(); // Ожидаем подзагрузки и инициализации jQuery
- };
-
-
- function waitJQ() {
- if (typeof(jQuery) == 'undefined') {
- window.setTimeout(waitJQ, 100); // Рекурсия каждые 100 миллисекунд, пока не загрузиться jQuery
- }
- else {
- // После успешного определения jQuery проверяем, используется ли нужный нам плагин на данном сайте (в данном случае fancybox)
- if (typeof(jQuery.fn.fancybox) == 'undefined') { // Если нет, то подключаем
- 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' />");
- }
-
- waitFB(); // Ожидаем подзагрузки и инициализации плагина fancybox
- }
- }
-
-
- function waitFB() {
- if (typeof(jQuery.fn.fancybox) == 'undefined') {
- window.setTimeout(waitFB, 100); // Рекурсия каждые 100 миллисекунд, пока не загрузиться fancybox
- }
- else {
- jQuery('a.fancy').fancybox({frameHeight:190, frameWidth:350}); // Собственно инициализация эффекта
- }
- }
- }
Пример можно посмотреть на сайте MoiaVizitka.ru. Если кому пригодится, буду рад.