Javascript WebView 中有时不会触发setTimeout
Javascript setTimeout is sometimes not triggered in WebView
我们有一个小型 Android 应用程序,主要由 WebView 组成。在此 WebView 中,我们加载一个 Angular 2 应用程序 (Angular 2.4),它定期轮询一个 API。为了定期触发轮询,我们使用递归调用:
private xxx() {
console.log("Beginning of xxx");
...
http.get(url).then( => {
console.log("Before setTimeout");
setTimeout(() => xxx(), 300);
});
}
轮询通常运行良好,但是,一段时间后(~ 1-2 分钟),轮询停止。从我们的日志记录中,我们可以看到设置了超时(上面的第二行日志),但是没有调用回调。
目前我们拥有的东西 tried/learned:
- 在同一台设备上查看 Chrome 中的应用程序不会重现问题
- 通过 Chrome 开发工具进行远程调试可防止出现此问题
- 触摸事件使应用程序重新开始轮询
Android 版本 6.0
API等级:23
此问题已通过将 system.android.WebView 从版本 46.0.2490.76 更新到 58.0.3029.83 解决。
我们有一个小型 Android 应用程序,主要由 WebView 组成。在此 WebView 中,我们加载一个 Angular 2 应用程序 (Angular 2.4),它定期轮询一个 API。为了定期触发轮询,我们使用递归调用:
private xxx() {
console.log("Beginning of xxx");
...
http.get(url).then( => {
console.log("Before setTimeout");
setTimeout(() => xxx(), 300);
});
}
轮询通常运行良好,但是,一段时间后(~ 1-2 分钟),轮询停止。从我们的日志记录中,我们可以看到设置了超时(上面的第二行日志),但是没有调用回调。
目前我们拥有的东西 tried/learned:
- 在同一台设备上查看 Chrome 中的应用程序不会重现问题
- 通过 Chrome 开发工具进行远程调试可防止出现此问题
- 触摸事件使应用程序重新开始轮询
Android 版本 6.0
API等级:23
此问题已通过将 system.android.WebView 从版本 46.0.2490.76 更新到 58.0.3029.83 解决。