2013-11-21 2 views
1

IFRAME:, если нет подключения к Интернету, скрыть IFrame

<iframe id="iframe" title="Environment Canada Weather" src="" allowtransparency="false" frameborder="0" height="170"></iframe> 

JQuery:

$(document).ready(function() { 
    window.setInterval(function(){ 
     if (navigator.onLine) { 
      //$("#iframe").show(); 
      $("#iframe").attr("src", "http://weather.gc.ca/wxlink/wxlink.html?cityCode=on-143&amp;lang=e"); 
     } 
     else{ 
      $("#iframe").hide(); 
     } 
    }, 5000); 
}); 

Я не в состоянии скрыть IFRAME, если нет подключения к Интернету. Я не знаю, что здесь не так. Спасибо.

+1

Возможный дубликат [Раз и навсегда, что делает navigator.onLine?] (Http://stackoverflow.com/questions/13076383/once-and-for-all-what-does-navigator-online-do) –

+0

Один из способов выяснить, вы в сети: http://stackoverflow.com/questions/2384167/check-if-internet-connection-exists-with-javascript – reto

+0

Это работает для меня .. http: // jsfiddle. net/2ryhL/ – zzlalani

ответ

1

navigator.onLine сообщает вам, находится ли браузер в автономном режиме или нет.

Это на самом деле не проверяет, можете ли вы достичь сети, как вы, вероятно, думаете.

(Для того, чтобы сделать это, вы могли бы попытаться пинг Google.com с помощью AJAX, или сделать какой-то подобный трюк)

+0

Есть ли способ проверить это на стороне клиента. Я не хочу показывать сообщение об ошибке в iframe, если нет подключения к Интернету. – user3018980

+0

@ user3018980 yes, сделайте то, что вы сейчас делаете, однако имейте в виду, что значение navigator.onLine будет обновляться только после запроса удаленной страницы или перехода на новую страницу. –

+1

«В Chrome и Safari, если браузер не может подключиться к локальной сети (LAN) или маршрутизатору, он отключен, все остальные условия верны. В Firefox и Internet Explorer переключение браузера в автономный режим ложное значение, все остальные условия возвращают истинное значение ». https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine.onLine – showdev

0

Вы можете сделать запрос Ajax с type:'jsonp' и timeout:3000 (который составляет три секунды) на одной странице вы хотите включить через фрейм.

$.ajax({ 
    type : "GET", 
    url : "http://weather.gc.ca/wxlink/wxlink.html?cityCode=on-143&amp;lang=e", 
    timeout : 3000, 
    dataType : "jsonp", 
    crossDomain : true, 
    success : function (response, textS, xhr) { 
     // never get here 
    }, 
    error : function (xmlHttpRequest, textStatus, errorThrown) { 
     if (textStatus === 'timeout') { 
      // not reachable 
     } else { 
      // reachable 
     } 
    } 
}); 

Однако вы всегда получите синтаксическую ошибку, поскольку содержимое этой страницы не является скриптом. Но браузеры, как правило, восстанавливаются после таких ошибок. UPD. Просто попробовал это с вашим URL, он работает.

Смежные вопросы