有时我在 IDE 中进行更改,并且不希望在保存后在浏览器中重新加载页面。一个典型的场景是我通过开发工具对页面进行更改,如果重新加载页面,那么这些更改将会丢失;或者也许我正在与某些远程 API 交互,并且不想丢失这样的状态。
有有方法可以禁用热重载,但这不是我想要的 - 我想继续使用它,但可以根据需要从前端本身每页禁用它。例如,我想使用禁用热重载的脚本将按钮注入页面。
_framework/aspnetcore-browser-refresh.js
脚本位于这里。
显而易见的解决方案是清除脚本的超时,但它使用
setTimeout
而不保存id。
我尝试过但没有成功:
window['_dotnet_watch_ws_injected'] = 1;
我还能尝试什么?
没有官方解决方案。我在存储库上添加了请求:请投票。
在那之前,这是我的解决方法(改编自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。要恢复正常,只需刷新页面即可。