Статьи

JavaScript XSS: отримання даних від facebook та вконтакте

  1. JavaScript XSS: отримання даних від facebook та вконтакте Про віджети популярних соціальних мереж...
  2. Лічильник публікацій
  3. На закінчення пара зауважень
  4. JavaScript XSS: отримання даних від facebook та вконтакте
  5. кнопка публікацій
  6. Лічильник публікацій
  7. На закінчення пара зауважень
  8. JavaScript XSS: отримання даних від facebook та вконтакте
  9. кнопка публікацій
  10. Лічильник публікацій
  11. На закінчення пара зауважень

JavaScript XSS: отримання даних від facebook та вконтакте

Про віджети популярних соціальних мереж знають практично всі web майстра. Використовувати їх досить просто. У більшості випадків потрібно вставити блок з JavaScript кодом в шаблон сторінки.

Але що ми отримуємо в результаті? Стандартну кнопку, що дозволяє відвідувачеві швидко опублікувати посилання на поточну сторінку в соціальній мережі і зазвичай лічильник таких публікацій.

При цьому, зовнішній вигляд веб-віджета повністю визначається розробником і змінити його досить проблематично, тому що він знаходиться всередині iframe, який завантажений з іншого домену. Тобто ваші стилі не будуть застосовуватися до цього iframe'у.

Безумовно, такі віджети виглядають дуже непогано і, найголовніше, вони впізнавані. Більшість відвідувачів прекрасно розуміє як ними користуватися без жодних додаткових підказок.

Проте, бувають ситуації коли потрібно змінити зовнішній вигляд віджету, та й вантажити JavaScript код соціальних мереж не дуже хочеться.

В цьому випадку доведеться створити свій віджет і забезпечити правильну його роботу з соціальними мережами.

Саме про таке рішення я хочу розповісти в цій статті. Як приклад візьмемо facebook та вконтакте. Вибір цей зроблений не випадково, різниця між API цих сервісів досить відчутна. Трохи нижче ви зрозумієте чому.

Умовно, віджет можна розбити на дві частини.

1) Кнопка публікації.
2) Лічильник публікацій.

Розглянемо їх докладніше.

кнопка публікацій

Тут все гранично просто. В обох випадках інформація передається в параметрах GET запиту. Тобто досить сформувати посилання наступного виду.

Для facebook:

& Lt; a href = "http://www.facebook.com/sharer.php?u=url&t=text" target = "_ blank" & gt; facebook & lt; / a & gt;

Для вконтакте:

<a href="http://vkontakte.ru/share.php?url=url" target="_blank"> вконтакте </a> ';

Замість url і text потрібно підставити адресу і опис сторінки, відповідно.

Лічильник публікацій

Тут код буде трохи складніше. В обох випадках для отримання значень лічильника потрібно відправити запит серверу соціальної мережі. І тут починаються варіанти.

У більшості джерел, які я бачив в Мережі, пропонують відправляти такий запит зі свого сервера (за допомогою PHP ) І потім кешувати результат. Мені цей підхід не подобається з кількох причин.

1) Будь-який запит займає якийсь час, яке додається до загального часу формування сторінки. Кешування в якійсь мірі вирішує цю проблему (запити будуть відправлятися не з кожним переглядом сторінки), але не повністю.

2) При великій кількості запитів, соціальна мережа може заблокувати ваш IP (залежить від політики соціальної мережі).

3) Створюється додаткове навантаження на ваш сервер.

Другий варіант - відправляти запити з боку клієнта, за допомогою JavaScript.

У цьому випадку запит піде з браузера відвідувача і, по крайней мере, IP адреси таких запитів будуть відрізнятися. Крім того, запит можна відправити після повного завантаження сторінки і робота вашого сайту жодним чином не буде залежати від доступності соціальної мережі.

Але, при реалізації такого підходу, виникають дві проблеми.

1) Захист браузерів від крос-доменних запитів.

Тобто ви не можете відправити AJAX запит на інший домен, але можна вставити в сторінку тег script і в його атрибуті src вказати адресу потрібного скрипта на іншому домені. В результаті браузер завантажить потрібний вам скрипт і виконає код, що знаходиться в ньому.

При використанні jQuery завдання вирішується за мінімумом зусиль. Наприклад, так:

$ .GetJSON ( 'http://vkontakte.ru/share.php?act=count&index=1&url=page_url&callback=?', Function (response) {...});

Зверніть увагу на параметр callback = ?. Якщо він зазначений, то jQuery вставить тег script всередину сторінки. Взагалі параметр callback розроблений для підтримки JSONP і вказує серверу, що відповідь в JSON форматі потрібно передати в якості параметра зазначеної функції. Ім'я цієї функції jQuery формує автоматично і підставляє замість знака питання.

Природно, JSONP повинен підтримуватися на стороні сервера. І зараз ми розберемо які відповіді ми отримаємо від соціальних мереж на практиці.

2) Формат відповіді соціальної мережі.

З facebook все відмінно. Ця соціальна мережа підтримує JSONP і якщо ми відправимо запит виду.

$ .GetJSON ( 'http://graph.facebook.com/' + encodeURI (page_url) + '& callback =?', Function (response) {if (response.shares! == undefined) {fb_counter = response.shares; } $ ( '# facebook_count'). html (response.shares);});

То отримаємо таку відповідь.

jQuery16105957901661749929_1306057803097 ({ "id": "http://www.smashingmagazine.com/", "shares": 5454});

jQuery16105957901661749929_1306057803097 - ім'я функції, яке згенерувала jQuery.
У першому параметрі цієї функції передається рядок в JSON форматі з адресою сторінки і кількістю публікацій.
В результаті, в обробник запиту буде переданий JS об'єкт з потрібними даними. У цьому прикладі він називається response, тобто отримати кількість публікацій посилання можна за допомогою виклику response.shares.

У випадку з вконтаке все складніше. Ця соціальна мережа JSONP не підтримує і на запит

$ .GetJSON ( 'http://vkontakte.ru/share.php?act=count&index=1&url=' + encodeURI (page_url) + '& callback =?', Function (response) {});

відповідає наступним рядком:

VK.Share.count (1, 9);

Природно, це призводить до виникнення помилки

VK is not defined

Взагалі відповідь сервера вконтакте - це звичайний виклик методу count, присвоєного параметру Share об'єкта VK. Звідки береться цей об'єкт? Його створює скрипт, який потрібно підключити при використанні стандартного віджету. Але цей скрипт нам не потрібен, тому що віджет ми не використовуємо, а кількість публікацій посилання потрібно вставити в заздалегідь підготовлений блок про який стандартний скрипт нічого не знає.

Тобто нам потрібен власний об'єкт VK з відповідними параметрами. Створити його зовсім не складно.

var VK = {Share: {count: function (value, count) {$ ( '# vkontakte_count'). html (count); }}}

Тепер, після отримання відповіді від сервера вконтакте, буде викликана анонімна функція, встановлена ​​для параметра count. У другому параметрі вона отримає кількість публікацій сторінки.

Зверніть увагу - цей код повинен знаходиться в глобальному контексті.

Наводжу весь код повністю.

Сторінки з лічильниками

<! DOCTYPE html> <html> <head> <title> Лічильники </ title> <meta charset = "utf-8" /> </ head> <body> <div> Facebook <span id = "facebook_count"> < / span> </ div> <div> ВКонтакте <span id = "vkontakte_count"> </ span> </ div> <script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.6. 1 / jquery.min.js "> </ script> <script src =" social_counters.js "> </ script> </ body> </ html>

скрипт social_counters.js

jQuery (document) .ready (function ($) {var fb_counter = 0; var vk_counter = 0; var page_url = 'http://www.smashingmagazine.com/'; $ .getJSON ( 'http://vkontakte.ru /share.php?act=count&index=1&url= '+ encodeURI (page_url) +' & callback =? ', function (response) {}); $ .getJSON (' http://graph.facebook.com/ '+ encodeURI (page_url) + '& callback =?', function (response) {if (response.shares! == undefined) {fb_counter = response.shares;} $ ( '# facebook_count'). html (response.shares);}) ;}); var VK = {Share: {count: function (value, count) {$ ( '# vkontakte_count'). html (count); }}}

На закінчення пара зауважень

1) Підтримка JSONP значно спрощує життя розробникам і в кінцевому підсумку сприяє популяризації соціальної мережі або сервісу.

2) Відсутність цієї підтримки не означає, що ви не зможете інтегрувати ваш сайт з даної соціальною мережею. Головне, щоб була можливість отримати потрібні дані в будь-якій формі. Природно, при цьому доведеться написати якусь кількість додаткового коду.

Якщо ви помітили помилку чи знаєте більш вдале рішення даної проблеми, пишіть, буде цікаво обговорити.
Успіхів!

цікаво почитати

Не знаєте, що подарувати подрузі на день народження ? Фотоальбом з її кращими знімками!

JavaScript XSS: отримання даних від facebook та вконтакте

Про віджети популярних соціальних мереж знають практично всі web майстра. Використовувати їх досить просто. У більшості випадків потрібно вставити блок з JavaScript кодом в шаблон сторінки.

Але що ми отримуємо в результаті? Стандартну кнопку, що дозволяє відвідувачеві швидко опублікувати посилання на поточну сторінку в соціальній мережі і зазвичай лічильник таких публікацій.

При цьому, зовнішній вигляд веб-віджета повністю визначається розробником і змінити його досить проблематично, тому що він знаходиться всередині iframe, який завантажений з іншого домену. Тобто ваші стилі не будуть застосовуватися до цього iframe'у.

Безумовно, такі віджети виглядають дуже непогано і, найголовніше, вони впізнавані. Більшість відвідувачів прекрасно розуміє як ними користуватися без жодних додаткових підказок.

Проте, бувають ситуації коли потрібно змінити зовнішній вигляд віджету, та й вантажити JavaScript код соціальних мереж не дуже хочеться.

В цьому випадку доведеться створити свій віджет і забезпечити правильну його роботу з соціальними мережами.

Саме про таке рішення я хочу розповісти в цій статті. Як приклад візьмемо facebook та вконтакте. Вибір цей зроблений не випадково, різниця між API цих сервісів досить відчутна. Трохи нижче ви зрозумієте чому.

Умовно, віджет можна розбити на дві частини.

1) Кнопка публікації.
2) Лічильник публікацій.

Розглянемо їх докладніше.

кнопка публікацій

Тут все гранично просто. В обох випадках інформація передається в параметрах GET запиту. Тобто досить сформувати посилання наступного виду.

Для facebook:

& Lt; a href = "http://www.facebook.com/sharer.php?u=url&t=text" target = "_ blank" & gt; facebook & lt; / a & gt;

Для вконтакте:

<a href="http://vkontakte.ru/share.php?url=url" target="_blank"> вконтакте </a> ';

Замість url і text потрібно підставити адресу і опис сторінки, відповідно.

Лічильник публікацій

Тут код буде трохи складніше. В обох випадках для отримання значень лічильника потрібно відправити запит серверу соціальної мережі. І тут починаються варіанти.

У більшості джерел, які я бачив в Мережі, пропонують відправляти такий запит зі свого сервера (за допомогою PHP ) І потім кешувати результат. Мені цей підхід не подобається з кількох причин.

1) Будь-який запит займає якийсь час, яке додається до загального часу формування сторінки. Кешування в якійсь мірі вирішує цю проблему (запити будуть відправлятися не з кожним переглядом сторінки), але не повністю.

2) При великій кількості запитів, соціальна мережа може заблокувати ваш IP (залежить від політики соціальної мережі).

3) Створюється додаткове навантаження на ваш сервер.

Другий варіант - відправляти запити з боку клієнта, за допомогою JavaScript.

У цьому випадку запит піде з браузера відвідувача і, по крайней мере, IP адреси таких запитів будуть відрізнятися. Крім того, запит можна відправити після повного завантаження сторінки і робота вашого сайту жодним чином не буде залежати від доступності соціальної мережі.

Але, при реалізації такого підходу, виникають дві проблеми.

1) Захист браузерів від крос-доменних запитів.

Тобто ви не можете відправити AJAX запит на інший домен, але можна вставити в сторінку тег script і в його атрибуті src вказати адресу потрібного скрипта на іншому домені. В результаті браузер завантажить потрібний вам скрипт і виконає код, що знаходиться в ньому.

При використанні jQuery завдання вирішується за мінімумом зусиль. Наприклад, так:

$ .GetJSON ( 'http://vkontakte.ru/share.php?act=count&index=1&url=page_url&callback=?', Function (response) {...});

Зверніть увагу на параметр callback = ?. Якщо він зазначений, то jQuery вставить тег script всередину сторінки. Взагалі параметр callback розроблений для підтримки JSONP і вказує серверу, що відповідь в JSON форматі потрібно передати в якості параметра зазначеної функції. Ім'я цієї функції jQuery формує автоматично і підставляє замість знака питання.

Природно, JSONP повинен підтримуватися на стороні сервера. І зараз ми розберемо які відповіді ми отримаємо від соціальних мереж на практиці.

2) Формат відповіді соціальної мережі.

З facebook все відмінно. Ця соціальна мережа підтримує JSONP і якщо ми відправимо запит виду.

$ .GetJSON ( 'http://graph.facebook.com/' + encodeURI (page_url) + '& callback =?', Function (response) {if (response.shares! == undefined) {fb_counter = response.shares; } $ ( '# facebook_count'). html (response.shares);});

То отримаємо таку відповідь.

jQuery16105957901661749929_1306057803097 ({ "id": "http://www.smashingmagazine.com/", "shares": 5454});

jQuery16105957901661749929_1306057803097 - ім'я функції, яке згенерувала jQuery.
У першому параметрі цієї функції передається рядок в JSON форматі з адресою сторінки і кількістю публікацій.
В результаті, в обробник запиту буде переданий JS об'єкт з потрібними даними. У цьому прикладі він називається response, тобто отримати кількість публікацій посилання можна за допомогою виклику response.shares.

У випадку з вконтаке все складніше. Ця соціальна мережа JSONP не підтримує і на запит

$ .GetJSON ( 'http://vkontakte.ru/share.php?act=count&index=1&url=' + encodeURI (page_url) + '& callback =?', Function (response) {});

відповідає наступним рядком:

VK.Share.count (1, 9);

Природно, це призводить до виникнення помилки

VK is not defined

Взагалі відповідь сервера вконтакте - це звичайний виклик методу count, присвоєного параметру Share об'єкта VK. Звідки береться цей об'єкт? Його створює скрипт, який потрібно підключити при використанні стандартного віджету. Але цей скрипт нам не потрібен, тому що віджет ми не використовуємо, а кількість публікацій посилання потрібно вставити в заздалегідь підготовлений блок про який стандартний скрипт нічого не знає.

Тобто нам потрібен власний об'єкт VK з відповідними параметрами. Створити його зовсім не складно.

var VK = {Share: {count: function (value, count) {$ ( '# vkontakte_count'). html (count); }}}

Тепер, після отримання відповіді від сервера вконтакте, буде викликана анонімна функція, встановлена ​​для параметра count. У другому параметрі вона отримає кількість публікацій сторінки.

Зверніть увагу - цей код повинен знаходиться в глобальному контексті.

Наводжу весь код повністю.

Сторінки з лічильниками

<! DOCTYPE html> <html> <head> <title> Лічильники </ title> <meta charset = "utf-8" /> </ head> <body> <div> Facebook <span id = "facebook_count"> < / span> </ div> <div> ВКонтакте <span id = "vkontakte_count"> </ span> </ div> <script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.6. 1 / jquery.min.js "> </ script> <script src =" social_counters.js "> </ script> </ body> </ html>

скрипт social_counters.js

jQuery (document) .ready (function ($) {var fb_counter = 0; var vk_counter = 0; var page_url = 'http://www.smashingmagazine.com/'; $ .getJSON ( 'http://vkontakte.ru /share.php?act=count&index=1&url= '+ encodeURI (page_url) +' & callback =? ', function (response) {}); $ .getJSON (' http://graph.facebook.com/ '+ encodeURI (page_url) + '& callback =?', function (response) {if (response.shares! == undefined) {fb_counter = response.shares;} $ ( '# facebook_count'). html (response.shares);}) ;}); var VK = {Share: {count: function (value, count) {$ ( '# vkontakte_count'). html (count); }}}

На закінчення пара зауважень

1) Підтримка JSONP значно спрощує життя розробникам і в кінцевому підсумку сприяє популяризації соціальної мережі або сервісу.

2) Відсутність цієї підтримки не означає, що ви не зможете інтегрувати ваш сайт з даної соціальною мережею. Головне, щоб була можливість отримати потрібні дані в будь-якій формі. Природно, при цьому доведеться написати якусь кількість додаткового коду.

Якщо ви помітили помилку чи знаєте більш вдале рішення даної проблеми, пишіть, буде цікаво обговорити.
Успіхів!

цікаво почитати

Не знаєте, що подарувати подрузі на день народження ? Фотоальбом з її кращими знімками!

JavaScript XSS: отримання даних від facebook та вконтакте

Про віджети популярних соціальних мереж знають практично всі web майстра. Використовувати їх досить просто. У більшості випадків потрібно вставити блок з JavaScript кодом в шаблон сторінки.

Але що ми отримуємо в результаті? Стандартну кнопку, що дозволяє відвідувачеві швидко опублікувати посилання на поточну сторінку в соціальній мережі і зазвичай лічильник таких публікацій.

При цьому, зовнішній вигляд веб-віджета повністю визначається розробником і змінити його досить проблематично, тому що він знаходиться всередині iframe, який завантажений з іншого домену. Тобто ваші стилі не будуть застосовуватися до цього iframe'у.

Безумовно, такі віджети виглядають дуже непогано і, найголовніше, вони впізнавані. Більшість відвідувачів прекрасно розуміє як ними користуватися без жодних додаткових підказок.

Проте, бувають ситуації коли потрібно змінити зовнішній вигляд віджету, та й вантажити JavaScript код соціальних мереж не дуже хочеться.

В цьому випадку доведеться створити свій віджет і забезпечити правильну його роботу з соціальними мережами.

Саме про таке рішення я хочу розповісти в цій статті. Як приклад візьмемо facebook та вконтакте. Вибір цей зроблений не випадково, різниця між API цих сервісів досить відчутна. Трохи нижче ви зрозумієте чому.

Умовно, віджет можна розбити на дві частини.

1) Кнопка публікації.
2) Лічильник публікацій.

Розглянемо їх докладніше.

кнопка публікацій

Тут все гранично просто. В обох випадках інформація передається в параметрах GET запиту. Тобто досить сформувати посилання наступного виду.

Для facebook:

& Lt; a href = "http://www.facebook.com/sharer.php?u=url&t=text" target = "_ blank" & gt; facebook & lt; / a & gt;

Для вконтакте:

<a href="http://vkontakte.ru/share.php?url=url" target="_blank"> вконтакте </a> ';

Замість url і text потрібно підставити адресу і опис сторінки, відповідно.

Лічильник публікацій

Тут код буде трохи складніше. В обох випадках для отримання значень лічильника потрібно відправити запит серверу соціальної мережі. І тут починаються варіанти.

У більшості джерел, які я бачив в Мережі, пропонують відправляти такий запит зі свого сервера (за допомогою PHP ) І потім кешувати результат. Мені цей підхід не подобається з кількох причин.

1) Будь-який запит займає якийсь час, яке додається до загального часу формування сторінки. Кешування в якійсь мірі вирішує цю проблему (запити будуть відправлятися не з кожним переглядом сторінки), але не повністю.

2) При великій кількості запитів, соціальна мережа може заблокувати ваш IP (залежить від політики соціальної мережі).

3) Створюється додаткове навантаження на ваш сервер.

Другий варіант - відправляти запити з боку клієнта, за допомогою JavaScript.

У цьому випадку запит піде з браузера відвідувача і, по крайней мере, IP адреси таких запитів будуть відрізнятися. Крім того, запит можна відправити після повного завантаження сторінки і робота вашого сайту жодним чином не буде залежати від доступності соціальної мережі.

Але, при реалізації такого підходу, виникають дві проблеми.

1) Захист браузерів від крос-доменних запитів.

Тобто ви не можете відправити AJAX запит на інший домен, але можна вставити в сторінку тег script і в його атрибуті src вказати адресу потрібного скрипта на іншому домені. В результаті браузер завантажить потрібний вам скрипт і виконає код, що знаходиться в ньому.

При використанні jQuery завдання вирішується за мінімумом зусиль. Наприклад, так:

$ .GetJSON ( 'http://vkontakte.ru/share.php?act=count&index=1&url=page_url&callback=?', Function (response) {...});

Зверніть увагу на параметр callback = ?. Якщо він зазначений, то jQuery вставить тег script всередину сторінки. Взагалі параметр callback розроблений для підтримки JSONP і вказує серверу, що відповідь в JSON форматі потрібно передати в якості параметра зазначеної функції. Ім'я цієї функції jQuery формує автоматично і підставляє замість знака питання.

Природно, JSONP повинен підтримуватися на стороні сервера. І зараз ми розберемо які відповіді ми отримаємо від соціальних мереж на практиці.

2) Формат відповіді соціальної мережі.

З facebook все відмінно. Ця соціальна мережа підтримує JSONP і якщо ми відправимо запит виду.

$ .GetJSON ( 'http://graph.facebook.com/' + encodeURI (page_url) + '& callback =?', Function (response) {if (response.shares! == undefined) {fb_counter = response.shares; } $ ( '# facebook_count'). html (response.shares);});

То отримаємо таку відповідь.

jQuery16105957901661749929_1306057803097 ({ "id": "http://www.smashingmagazine.com/", "shares": 5454});

jQuery16105957901661749929_1306057803097 - ім'я функції, яке згенерувала jQuery.
У першому параметрі цієї функції передається рядок в JSON форматі з адресою сторінки і кількістю публікацій.
В результаті, в обробник запиту буде переданий JS об'єкт з потрібними даними. У цьому прикладі він називається response, тобто отримати кількість публікацій посилання можна за допомогою виклику response.shares.

У випадку з вконтаке все складніше. Ця соціальна мережа JSONP не підтримує і на запит

$ .GetJSON ( 'http://vkontakte.ru/share.php?act=count&index=1&url=' + encodeURI (page_url) + '& callback =?', Function (response) {});

відповідає наступним рядком:

VK.Share.count (1, 9);

Природно, це призводить до виникнення помилки

VK is not defined

Взагалі відповідь сервера вконтакте - це звичайний виклик методу count, присвоєного параметру Share об'єкта VK. Звідки береться цей об'єкт? Його створює скрипт, який потрібно підключити при використанні стандартного віджету. Але цей скрипт нам не потрібен, тому що віджет ми не використовуємо, а кількість публікацій посилання потрібно вставити в заздалегідь підготовлений блок про який стандартний скрипт нічого не знає.

Тобто нам потрібен власний об'єкт VK з відповідними параметрами. Створити його зовсім не складно.

var VK = {Share: {count: function (value, count) {$ ( '# vkontakte_count'). html (count); }}}

Тепер, після отримання відповіді від сервера вконтакте, буде викликана анонімна функція, встановлена ​​для параметра count. У другому параметрі вона отримає кількість публікацій сторінки.

Зверніть увагу - цей код повинен знаходиться в глобальному контексті.

Наводжу весь код повністю.

Сторінки з лічильниками

<! DOCTYPE html> <html> <head> <title> Лічильники </ title> <meta charset = "utf-8" /> </ head> <body> <div> Facebook <span id = "facebook_count"> < / span> </ div> <div> ВКонтакте <span id = "vkontakte_count"> </ span> </ div> <script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.6. 1 / jquery.min.js "> </ script> <script src =" social_counters.js "> </ script> </ body> </ html>

скрипт social_counters.js

jQuery (document) .ready (function ($) {var fb_counter = 0; var vk_counter = 0; var page_url = 'http://www.smashingmagazine.com/'; $ .getJSON ( 'http://vkontakte.ru /share.php?act=count&index=1&url= '+ encodeURI (page_url) +' & callback =? ', function (response) {}); $ .getJSON (' http://graph.facebook.com/ '+ encodeURI (page_url) + '& callback =?', function (response) {if (response.shares! == undefined) {fb_counter = response.shares;} $ ( '# facebook_count'). html (response.shares);}) ;}); var VK = {Share: {count: function (value, count) {$ ( '# vkontakte_count'). html (count); }}}

На закінчення пара зауважень

1) Підтримка JSONP значно спрощує життя розробникам і в кінцевому підсумку сприяє популяризації соціальної мережі або сервісу.

2) Відсутність цієї підтримки не означає, що ви не зможете інтегрувати ваш сайт з даної соціальною мережею. Головне, щоб була можливість отримати потрібні дані в будь-якій формі. Природно, при цьому доведеться написати якусь кількість додаткового коду.

Якщо ви помітили помилку чи знаєте більш вдале рішення даної проблеми, пишіть, буде цікаво обговорити.
Успіхів!

цікаво почитати

Не знаєте, що подарувати подрузі на день народження ? Фотоальбом з її кращими знімками!

Але що ми отримуємо в результаті?
Php?
Php?
Php?
Act=count&index=1&url=page_url&callback=?
Зверніть увагу на параметр callback = ?
GetJSON ( 'http://graph.facebook.com/' + encodeURI (page_url) + '& callback =?
Звідки береться цей об'єкт?
GetJSON (' http://graph.facebook.com/ '+ encodeURI (page_url) + '& callback =?
Але що ми отримуємо в результаті?

Новости