首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >webRequest API:如何获得新请求的requestId?

webRequest API:如何获得新请求的requestId?
EN

Stack Overflow用户
提问于 2017-11-16 14:12:46
回答 1查看 2.5K关注 0票数 2

chrome.webRequest API有请求ID的概念(源:Chrome webRequest文档):

请求ID 每个请求都由一个请求ID标识。此ID在浏览器会话和扩展上下文中是唯一的。它在请求的生命周期中保持不变,并可用于匹配同一请求的事件。注意,在HTTP重定向或HTTP身份验证的情况下,多个HTTP请求映射到一个web请求。

您可以使用它来关联请求,甚至跨重定向。但是当使用fetchXMLHttpRequest启动新请求时,您最初是如何阻止id的?

到目前为止,我还没有找到比使用请求的URL作为在新请求和requestId之间建立初始链接的方法更好的方法。但是,如果对同一资源存在重叠请求,则这是不可靠的。

问题:

  • 如果您提出了一个新请求(使用fetchXMLHttpRequest),那么如何可靠地访问requestId?
  • fetch API或XMLHttpRequest API允许访问requestId吗?

我想要做的是使用webRequest API提供的功能来修改单个请求,但我希望确保不会意外地修改其他挂起的请求。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-17 00:08:31

据我所知,fetchXHMLHttpRequest API中没有直接支持。另外,我不知道完全可靠的方法来获得requestId。

我最后所做的是安装一个onBeforeRequest侦听器,存储requestId,然后再次删除该监听器。例如,它可以如下所示:

代码语言:javascript
运行
复制
function makeSomeRequest(url) {

  let listener;
  const removeListener = () => {
    if (listener) {
      chrome.webRequest.onBeforeRequest.removeListener(listener);
      listener = null;
    }
  };

  let requestId;
  listener = (details) => {
    if (!requestId && urlMatches(details.url, url)) {
      requestId = details.requestId;
      removeListener();
    }
  };
  chrome.webRequest.onBeforeRequest.addListener(listener, { urls: ['<all_urls>'] });

  // install other listeners, which can then use the stored "requestId"
  // ...

  // finally, start the actual request, for instance
  const promise = fetch(url).then(doSomething);

  // and make sure to always clean up the listener
  promise.then(removeListener, removeLister);
}

它并不完美,与URL匹配是我留下的一个细节。您可以简单地比较details.url是否与url相同。

代码语言:javascript
运行
复制
function urlMatches(url1, url2) {
  return url1 === url2;
}

请注意,不能保证您看到相同的URL,例如,如果针对http://some.domain.test发出请求,您将在侦听器中看到http://some.domain.test/ (有关详细信息,请参阅我的其他问题 )。或者http://可以被https://取代(在这里我不确定,但可能是因为其他扩展,比如到处都是HTTPS)。

这就是为什么上面的代码只能被看作是这个想法的草图。在实践中,只要您不对相同的URL启动多个请求,它就会工作得很好。尽管如此,我还是想了解一个更好的方法来解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47331875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档