【问题标题】:How to check if Firefox OS is connected to the internet or not如何检查 Firefox OS 是否连接到互联网
【发布时间】:2014-03-13 12:50:29
【问题描述】:

我们如何检查 Firefox OS 设备是否连接到互联网?我试过了 navigator.mozConnection, navigator.connection.type, navigator.onLine 但它不起作用。

请告诉我。谢谢。

【问题讨论】:

    标签: javascript firefox-os


    【解决方案1】:

    Peter 的建议是可行的,尽管它并不优雅或遵循最佳实践。

    我通过提供一些代码示例以及如何实现这一点来补充 Jason Weathersby 的答案。

    浏览器行为

    这是一个非常依赖于浏览器的实现,您应该谨慎使用这些属性。正如 MDN 中所述,

    在 Chrome 和 Safari 中,如果浏览器无法连接到局域网 (LAN) 或路由器,则它处于离线状态;所有其他条件都返回 true。因此,虽然您可以假设浏览器在返回 false 值时处于脱机状态,但您不能假设 true 值必然意味着浏览器可以访问互联网

    这意味着您可以在没有互联网访问的情况下连接到 LAN 并且仍然返回 true。

    在 Firefox 和 Internet Explorer 中,将浏览器切换为离线 mode 发送一个假值。所有其他条件都返回真值。

    如果浏览器不支持 navigator.onLine 上面的例子会 总是以虚假的形式出现(假/未定义)。

    代码示例

    要检查您是否有连接,请尝试online = window.navigator.onLine;

    如果你想监听连接变化,你应该做类似的事情

    当连接关闭时

    window.addEventListener("offline", function(e) {do something})

    连接恢复时

    window.addEventListener("online", function(e) {do something})

    其他建议

    这些解决方案可能不可靠,因此如果您想在这里安全,可以使用一些备用方案。正如http://www.html5rocks.com/en/mobile/workingoffthegrid/ 所示,您可以尝试做类似的事情

    window.applicationCache.addEventListener("error", function(e) { alert("Error fetching manifest: a good chance we are offline"); });

    之所以如此,是因为它总是尝试请求清单以检查它是否需要更新其资产列表。如果请求失败,通常是以下两种情况之一:不再使用清单文件(即未托管)或系统无法访问网络以获取文件。

    【讨论】:

    【解决方案2】:

    你可以发出一个 Ajax 请求,看看它是否通过,重复几次,如果没有任何反应,那么你可以推断没有互联网连接,然后从那里做任何你想做的事情。

    【讨论】:

    • 这是最后的解决方案。 :) 谢谢。
    • 我刚刚在 Firefox OS 1.2 上尝试了 navigator.onLine,它对我有用。
    • @JasonWeathersby,完美,也许你应该发布你的代码作为答案或者评论提问者的帖子。
    • Peter 我刚刚在这里使用了代码:developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine.onLine
    • @NinoPaolo,请参阅 Jason 的评论以获取可能的解决方案。
    【解决方案3】:

    为了扩展 Peter 已经提出的建议,您可以通过以下方式为特权打包应用实施解决方法。

    来自Offline Apps on MDN

    // We'll assume we aren't online.
    var online = false;
    
    // Assume we're a packaged app with systemXHR permissions.
    // https://developer.mozilla.org/docs/Web/Apps/App_permissions
    var request = new window.XMLHttpRequest({mozSystem: true});
    request.open('HEAD', 'http://www.mozilla.org/robots.txt', true);
    request.timeout = 5750;
    
    request.addEventListener('load', function(event) {
       console.log('We seem to be online!', event);
       online = true;
    });
    
    var offlineAlert = function(event) {
       console.log('We are likely offline:', event);
    }
    

    我不确定如何为托管或非特权应用执行此操作。希望其他人可以提供更好的解决方案。

    【讨论】:

      【解决方案4】:
      if (navigator.onLine) {
      //you code if internet is on
      }
      

      //在我的firefox操作系统中测试,ZTE OPEN

      【讨论】:

        猜你喜欢
        • 2015-05-25
        • 2019-09-03
        • 1970-01-01
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 2022-12-01
        • 2011-09-02
        • 1970-01-01
        相关资源
        最近更新 更多