android - Android webview 返回 navigator.online true
问题描述
在 Android Webview 中,如果 navigator.onLine 返回 true 以获取新数据,或者如果 false 继续使用本地数据,我将每 10 秒重新检查一次。
但是,对于 navigator.onLine,Android WebView 始终返回 true。在 Chrome 浏览器(在手机上)中,同一网站可以正常工作,并根据连接显示正确的状态(真/假)。
我使用 logcat 和远程 chrome 检查器对其进行了调试。在远程 chrome 检查器中,我可以手动离线切换连接。除了在java(本机应用程序)中使用网络侦听器之外,任何有相同问题或解决该问题的想法的人。
if (navigator.onLine) {
// check if new data is available
checkDataUpdate();
} else {
// OFFLINE - Mode
}
解决方案
我遇到了同样的问题,在尝试了不同的方法后,我发现我有一个网络资产webView.setNetworkAvailable(true);
这是 navigator.onLine 始终返回 true 的主要原因。只要发现你有上面的代码并把它注释掉。之后,webView 将像 chrome 浏览器一样工作。
来自安卓文档:
setNetworkAvailable
在 API 级别 3 中添加
void setNetworkAvailable (boolean networkUp)
通知 WebView 网络状态。这用于设置 JavaScript 属性 window.navigator.isOnline 并生成 HTML5 中指定的在线/离线事件
推荐阅读
- azure - 如何发布连接到存储帐户的 Azure 函数
- javascript - Angular:BehaviorSubject 未按预期工作
- python - 缺少 pyodbc 4.0.0 对批处理但不依赖于 spyder
- osgi - 用于 MSSQL 的 AEM OSGI 捆绑包 - 错误 javax.net.SocketFactory classdefnotfound
- javascript - 将焦点返回到打开模式的元素。纯 JavaScript
- c# - 带有使用服务的 EF 控制器的 ASP.NET 5 MVC
- excel - 找到匹配项时,将行从一张表复制到宏中找到匹配项的行
- docker - docker compose inside docker in docker
- wordpress - 从管理栏和插件列表中隐藏插件
- sql-server - 使用 TRANSLATE 函数替换 Unicode 字符