使用Javascript在Safari中检查互联网连接时出现奇怪的响应
Strange response when checking internet connection in Safari using Javascript
每当用户的互联网连接丢失时,我都会尝试让某个div出现在我的网页上。
为了做到这一点,我使用一些Javascript来调用一个php文件,这个文件会回显"1"。如果接收到echo,则连接处于活动状态,Javascript将在控制台中打印"connected"。
如果没有接收到echo,那么Javascript将在控制台中打印"disconnected",并显示div(这个div包含一条消息,让用户知道他们已经失去了连接)。div占据了整个页面,因此它有效地冻结了页面,防止用户与它交互,这正是我想要的。这是我正在使用的Javascript代码:
var checkConnection = function checkConnection() {
$.ajax({
url: 'php_scripts/checkconnection.php',
type: "POST",
cache: false,
success: function() {
document.getElementById('openOfflineDIV').style.display = 'none';
console.log("connected"); },
error: function() {
document.getElementById('openOfflineDIV').style.display = 'block';
console.log("disconnected"); }
}).complete(function() {
setTimeout(checkConnection, 2000);
});
}
这是php文件"checkconnection.php":
<?php echo '1'; ?>
正如你所看到的,我将这个函数设置为每2秒运行一次。
我遇到的问题是:这个函数在Chrome、Firefox、IE和Opera上运行得很好,但当我在Safari上测试它时,它会反复显示断开连接的div。我在几台设备(笔记本电脑、安卓手机等)上测试过它,它运行良好,但当我使用Safari在我的Ipad和Mac上测试它时,断开连接的div大约每10秒出现一次,它保持断开连接大约5秒,然后div消失/重新建立连接,但大约10秒后,div再次出现,这种情况一直持续下去。我不知道是什么原因造成的,但这似乎是Safari浏览器特有的问题。
有人知道是什么原因造成的吗?我已经尝试将函数重复的时间从2秒延长到5秒,这似乎降低了断开的div出现的频率,但它仍然经常出现。
有没有更好的方法来检查实时互联网连接?我不想再延长时间,因为理想情况下,连接检查将每秒运行一次。
我真的很感激关于如何解决这个问题的建议。提前感谢您在这方面的帮助。
checkConnection
可能被解雇了好几次,您的一些请求可能会失败。
有几个库可以检查用户是否在线并显示/隐藏适当的消息。这就是其中之一:
https://github.com/hubspot/offline
- 如何将getJson的响应保存在全局变量中
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 如何使用密码检测网络中的状态连接
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- XHR 响应:连接已关闭
- 节点.js浏览器响应:连接超时
- 在多个选项卡中测试 websocket 连接会使页面快速响应
- 使用Javascript在Safari中检查互联网连接时出现奇怪的响应
- 在服务器关闭连接之前,浏览器不会响应服务器发送的事件
- 在收到握手响应之前,连接已关闭
- 如何捕获`WebSocket连接到'ws://xxx:nn'失败:连接在收到握手响应之前关闭`error
- 客户端在收到整个响应之前关闭了连接-onClick跟踪错误
- 如何在 Angular 中的响应 URL 中捕获参数(条带连接)
- 管道连接Gulp流文件.对服务器的内容(连接、表达或http)响应
- Meteor:响应式连接公开中间数据
- 与
的 WebSocket 连接失败:WebSocket 握手期间出错:意外响应代码:404 - 读取 Node.js 中的套接字连接响应
- 当与服务器没有连接时,从缓存返回响应