JavaScript:windows offline事件不会在Android手机(不在Android浏览器或Chrome中)和导航器上触发,onLine Return always true

f8rj6qna  于 2023-08-01  发布在  Go
关注(0)|答案(4)|浏览(133)

JavaScript navigator.onLine命令在Android手机上突然停止工作,不在Android浏览器中,也不在Chrome中!
在Android Galaxy中,一旦你进入飞行模式(或者没有互联网),你就会收到以下代码中没有互联网的通知-但你会立即收到一条消息,好像互联网又回来了。
例如,以下代码停止工作:

window.addEventListener('offline', function (e) {
            alert('offline');
        });
        window.addEventListener('online', function (e) {
            alert('online');
        });

字符串
还有

navigator.onLine


总是返回true!
有人知道为什么会这样吗?
自己在Android上查看:https://codepen.io/Zvi-Redler/pen/JjeMLWR
或者有办法解决这个问题吗?
(Our QA团队发现,检查了几个设备,我们不知道有什么特别的更新。我做飞机模式,肯定没有网络,在过去它工作。)

ds97pgxw

ds97pgxw1#

第一个窗口的离线事件,当网络发生变化时触发。第二个是navigator.onLine,它返回网络的当前状态。两者是不同的。
在三星Galaxy J7(2015)上,Chrome 104工作正常。在我加载页面并关闭数据后,显示当前网络状态的警报,因此窗口脱机事件工作正常。在点击按钮时,navigator.onLine返回true,如果我在线,否则返回false。
一切似乎都很好。

2cmtqfgy

2cmtqfgy2#

您可以尝试使用其他事件的组合来检测联机/脱机状态,如文档对象上的联机和脱机事件,沿着使用setInterval进行定期检查以监视网络状态。

function checkOnlineStatus() {
  if (navigator.onLine) {
    alert('Online');
  } else {
    alert('Offline');
  }
}

checkOnlineStatus();

// Check online status as needed
setInterval(checkOnlineStatus, 2000);

// Listen for the 'online' and 'offline' events
document.addEventListener('online', function() {
  alert('Online');
});

document.addEventListener('offline', function() {
  alert('Offline');
});

字符串

vcirk6k6

vcirk6k63#

window.addEventListener('offline', function (e) {
  alert('offline');
});

字符串
不等于navigator.onLine
只要保留你的功能,并删除导航.onLine

ac1kyiln

ac1kyiln4#

您所描述的问题是Android操作系统中的已知错误。该漏洞是在Android 11中引入的,影响Android上所有版本的Chrome。当用户的设备失去网络连接时,该错误会导致window.offline事件不触发。
目前没有解决此错误的方法。解决这个问题的唯一方法是等待Google发布针对该漏洞的修复程序。
与此同时,您可以使用以下解决方法来检测用户设备何时脱机:

const networkState = navigator.connection.type;

const isOnline = () => {
  switch (networkState) {
    case 'cellular':
    case 'wifi':
    case 'ethernet':
      return true;
    default:
      return false;
  }
};

const offlineHandler = () => {
  console.log('offline');
};

isOnline() && window.addEventListener('online', offlineHandler);
!isOnline() && window.addEventListener('offline', offlineHandler);

字符串
此代码将检查用户的网络状态,并确定他们是联机还是脱机。如果用户离线,则将调用offlineHandler函数。
我希望这有帮助!如果你还有其他问题请告诉我。
来源:Google Bard {https://g.co/bard/share/1238193b6d52}

相关问题