从前端禁用 ASP.NET Core 热重载脚本

问题描述 投票:0回答:1

有时我在 IDE 中进行更改,并且不希望在保存后在浏览器中重新加载页面。一个典型的场景是我通过开发工具对页面进行更改,如果重新加载页面,那么这些更改将会丢失;或者也许我正在与某些远程 API 交互,并且不想丢失这样的状态。

有方法可以禁用热重载,但这不是我想要的 - 我想继续使用它,但可以根据需要从前端本身每页禁用它。例如,我想使用禁用热重载的脚本将按钮注入页面。

_framework/aspnetcore-browser-refresh.js
脚本位于这里

显而易见的解决方案是清除脚本的超时,但它使用

setTimeout
而不保存id。

我尝试过但没有成功:

window['_dotnet_watch_ws_injected'] = 1;

我还能尝试什么?

javascript asp.net-core razor-pages hot-reload asp.net-core-7.0
1个回答
0
投票

没有官方解决方案。我在存储库上添加了请求请投票

在那之前,这是我的解决方法(改编自this)。

首先,在加载热重载脚本(

/_framework/aspnetcore-browser-refresh.js
)之前运行此命令:

window.hotreloadSockets = [];
const nativeWebSocket = window.WebSocket;
window.WebSocket = function(...args){
  const socket = new nativeWebSocket(...args);
  if (socket.url.indexOf('ws://localhost:') === 0 )
    window.hotreloadSockets.push(socket);
  return socket;
};

其次,仅在开发期间,向所有页面添加一个按钮,单击该按钮会执行以下操作:

window.hotreloadSockets.forEach(x => x.close());

这将关闭两个热重载 websocket。要恢复正常,只需刷新页面即可。

© www.soinside.com 2019 - 2024. All rights reserved.