Chrome 捕获网::Angular 应用程序中的ERR_NETWORK_CHANGED

6ljaweal  于 2023-03-06  发布在  Go
关注(0)|答案(1)|浏览(279)

我们有一个Angular 4应用程序,有时在Chrome中,我们得到的错误
网络::错误网络已更改
当加载资源(图像等)时。这通常发生在客户端/ Chrome的IP发生变化时。
有人知道如何在Angular 中捕捉这个错误吗?

d6kp6zgx

d6kp6zgx1#

这个问题的一个可能的解决方法是创建一个永不结束的请求,比如SSE请求,然后检测错误(如果你真的需要一个全局监听器)。
这个例子只有在你想在网络错误发生时重新加载页面时才真正有用。似乎没有一个全局错误侦听器可以用于这类错误,但是你也可以将其应用于对服务器的特定短请求(如加载图像)。只需在你的特定(而不是全局)请求上注册一个错误处理程序。

Javascript SSE示例

在这种情况下,重新加载页面就足够了。当我打开或关闭VPN连接时,net :: ERR_NETWORK_CHANGED错误发生在我的案例中。我只想在此之后重新加载页面。

var source = new EventSource("YOUR_SSE_ENDPOINT");
source.onmessage = function(event) {};
source.onerror = function() { 
    source.close();
    console.log("Reload the page after 10 seconds because of network error");
    setTimeout(function(){ 
        location.reload();
    }, 10*1000);
};

HTML5 / Javascript图像示例

正如我所说的,它还可以处理其他特定的请求,比如图像:

<img src="image_link_where_network_changed_error_occurs" onerror="location.reload()">

你应该知道它不会过滤错误类型,所以当你的图片网址出现404错误时,它会重新加载页面,这可能不是你想要的。

尝试重新加载图像

另一个用例是尝试并重新加载镜像5次,在此期间,网络可以恢复并加载镜像,或者如果没有(或者镜像返回404),它将在5次后停止。

<script>
function reloadImage(image) {
    if (!image.hasOwnProperty('counter')){
      image.counter = 0;
    }
    
    if (image.counter < 5){
      setTimeout(function (){
          image.src += '?' + +Math.random();
          image.counter += 1;
      }, 1000);
    }
  }
</script>

<img src="image_link_where_network_changed_error_occurs" onerror="reloadImage(this)">

相关问题