有没有办法从JavaScript模拟网络条件?

有没有办法从JavaScript模拟网络条件?,javascript,networking,browser,developer-tools,Javascript,Networking,Browser,Developer Tools,在Firefox的开发者工具中,可以选择模拟特定类型的移动数据连接等条件。有没有一种方法可以从JavaScript激活此功能,而不需要用户打开开发人员控制台?根据您的使用情况,您可以 安装一个服务工作者,该服务工作者侦听“fetch”事件,然后调用事件 在应用程序作用域中拦截对fetch/XMLHttpRequest的调用以执行相同的操作(覆盖window.fetch和/或window.XMLHttpRequest)-注意这不会影响直接从HTML加载的图像/资源 设置HTTP cookie或标头

在Firefox的开发者工具中,可以选择模拟特定类型的移动数据连接等条件。有没有一种方法可以从JavaScript激活此功能,而不需要用户打开开发人员控制台?

根据您的使用情况,您可以

  • 安装一个服务工作者,该服务工作者侦听“fetch”事件,然后调用
    事件
    
  • 在应用程序作用域中拦截对fetch/XMLHttpRequest的调用以执行相同的操作(覆盖
    window.fetch
    和/或
    window.XMLHttpRequest
    )-注意这不会影响直接从HTML加载的图像/资源
  • 设置HTTP cookie或标头,并在响应之前使服务器延迟(但是,许多用户这样做可能会降低服务器并发性)
  • 请注意,如果您想用流式资源(例如,渐进式JPEG、HTML)模拟这种行为,最好的选择是服务工作者路线,您可以在这里直接构建
    ReadableStream
    (请参阅此处获得一些启示:)


    对于实际的流行为本身,我会考虑使用像RXJS管道之类的东西,这将使您很容易引入延迟、任意停止等来模拟不同的网络条件。但是,根据您的具体用例,也许您可以用JavaScript实现一个服务工作者来模拟请求问题。@CherryDT-嗯,它可以通过权限或其他方式激活。不过,如果你想充实它并发布答案,服务人员的方法是个好主意。非常聪明,谢谢!我真的很喜欢这些想法,尽管我还不确定是否接受它,因为它实际上没有激活网络条件模拟。我想如果现在不可能的话,我应该接受一个解决方案,直到它成为可能。如果有人发现这是可能的,我会等待其他答案。如果到周二我还没有接受,请提醒我;)如果您想实际激活这些函数,那么不,这些API不会向应用程序代码公开。总的来说,他们是非常有特权的——他们可以检查像HTTP-only cookies(用于保护身份验证令牌免受XSS攻击)这样的东西,所以任何类似的东西都可能成为攻击的旁道。在AFAIK前端,您唯一的其他选择是自定义浏览器扩展,它可以做比不受信任的JavaScript更特权的事情。@Luc-找到了其他方法吗?啊,的确,没有,这似乎是目前的方法。再次感谢:)