2013-03-27 4 views
0

Я хочу использовать кнопку facebook как на своем веб-сайте. так как большинство моих посетителей из Ирана, а facebook фильтруется в Иране, если кто-то прибывает из Ирана, подобная кнопка фильтруется, и страница становится очень уродливой. то, что я думал, чтобы предотвратить это, - это использовать веб-клиент, чтобы попытаться подключиться к facebook. в случае успеха, я помещаю кнопку, как, в противном случае я не:изменение времени отклика webclient

string fb_result="failed"; 
WebClient webclient= new WebClient(); 
try{ 
fb_result=webclient.DownloadString("http://www.fabebook.com"); 
} 
catch{ 
fb_result="failed"; //if its being filtered exception is raised 
} 

в моем HTML:

<%if(fb_result)!="failed"){%> 
<div id="fb-root"></div> 
<script>(function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/all.js#xfbml=1"; 
    fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk'));</script> 
<div class="fb-like" data-href="http://www.mysite.com" data-send="true" data-width="450" data-show-faces="true"></div> 
<%}%> 

это работает нормально, но проблема в том, когда WebClient не может подключиться, то занимает много времени, чтобы поднять ошибку. есть ли способ сделать веб-клиент попыткой на более короткое время и, если он не сможет подключиться, быстрее повысит ошибку.

Кстати, любые другие способы проверить, возможно ли подключение к facebook или нет. так как это может быть не единственный способ проверить это.

+2

Это не сработает, WebClient выполняется на сервере, а не на ваших клиентах, поэтому он всегда будет успешным. Вместо этого отобразите кнопку Like, используя клиентский скрипт, который сначала проверяет Facebook. – Dai

+0

но как я могу проверить? ajax не будет работать, если я загружу его в iframe, я не смогу проверить его документ. Есть ли у вас какие-либо предложения? –

+1

Метод AJAX будет работать: он сообщит об ошибке. Если это удастся, вы добавите кнопку Like. Вам не нужно действительно запрашивать DOM Facebook (если фильтр Ирана не отправит фиктивный ответ, я не знаю, как это работает). – Dai

ответ

1

Как я уже говорил в своих комментариях, код, который вы написали, не будет работать, потому что он выполняется на сервере, поэтому он попытается подключиться к Facebook с помощью подключения вашего веб-сервера, которое всегда будет успешным (если ваш веб-хостинг не работает).

Лучшим подходом является запрос AJAX, сделанный вашей страницей при загрузке в браузере. Он должен сделать запрос на известный ресурс на Facebook (например, на своей домашней странице или само изображение «Как»). Затем ваш обработчик ответа AJAX загрузит остальные клиентские скрипты Facebook, если и только если ответ будет ожидаемым. Если вы протестируете его, запросив изображение Like, вам просто нужно проверить тип содержимого ответа (то есть убедиться, что это image/png); если в ответе есть код статуса не-200, или если время ожидания запроса, вы не загружаете скрипты Facebook.

+0

в обоих случаях (отфильтровано и нет) ответ равен 0. Я думаю, что его, потому что его не в моем домене –

+0

'0' недействительный код ответа. Отправьте код, который вы используете. – Dai

+0

var xmlhttp; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new ActiveXObject ("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function() { alert (xmlhttp.status); alert (xmlhttp.readyState); } xmlhttp.open ("GET", "http://www.facebook.com/index.php", true); xmlhttp.send(); –