Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome extension 使用WebRequestAPI确定传出请求的帧URL_Google Chrome Extension - Fatal编程技术网

Google chrome extension 使用WebRequestAPI确定传出请求的帧URL

Google chrome extension 使用WebRequestAPI确定传出请求的帧URL,google-chrome-extension,Google Chrome Extension,我正在使用WebRequestAPI修改Chrome发送的请求。为了知道如何重写请求,我想知道导致传出请求的帧URL是什么。我知道我可以获得框架ID和选项卡ID,通过它们我可以向内容脚本发送消息以查找URI。但由于消息传递始终是异步的,因此似乎无法确保在发送请求之前获得该信息 这是一个测试工具,不是针对普通用户的,所以我不介意增加一些延迟。有人知道有没有其他方法可以做到这一点吗?我尝试使用setTimeout,但它被内容安全策略阻止。使用referer并不能完全解决这个问题,因为它没有设置在来自

我正在使用WebRequestAPI修改Chrome发送的请求。为了知道如何重写请求,我想知道导致传出请求的帧URL是什么。我知道我可以获得框架ID和选项卡ID,通过它们我可以向内容脚本发送消息以查找URI。但由于消息传递始终是异步的,因此似乎无法确保在发送请求之前获得该信息


这是一个测试工具,不是针对普通用户的,所以我不介意增加一些延迟。有人知道有没有其他方法可以做到这一点吗?我尝试使用setTimeout,但它被内容安全策略阻止。使用referer并不能完全解决这个问题,因为它没有设置在来自HTTPS框架的HTTP请求上。

我不确定我是否完全理解您试图实现的目标,但我想以下是我的想法

场景

主框架google,子框架facebook和twitter,你想修改来自facebook框架的任何请求

如果是这样的话,那么这里就是我要尝试的

1.注册事件侦听器,它将用于检索已完成的请求信息,即url和帧id,并将它们存储在数组中

2.注册事件监听器,该监听器将用于检索请求信息,并将其与您在上一步中存储的信息进行比较,如果通过,您可以修改头

因此代码将如下所示

({将信息(即url和帧id)存储在数组中},…)

({将发出请求的帧id与之前存储的帧id进行比较,如果它们匹配修改标头},…)

您的方法与我列出的方法之间的差异

在您的方法中,您使用异步消息在请求发送后检索有关帧的信息,在我的方法中,您将为您准备好这些信息,而无需执行任何进一步的消息传递,因此每当发生请求时,您都可以立即使用它们


希望你会觉得这很有帮助,祝你好运。

我不确定自己是否完全理解你想要实现的目标,但以下是我的想法

场景

主框架google,子框架facebook和twitter,你想修改来自facebook框架的任何请求

如果是这样的话,那么这里就是我要尝试的

1.注册事件侦听器,它将用于检索已完成的请求信息,即url和帧id,并将它们存储在数组中

2.注册事件监听器,该监听器将用于检索请求信息,并将其与您在上一步中存储的信息进行比较,如果通过,您可以修改头

因此代码将如下所示

({将信息(即url和帧id)存储在数组中},…)

({将发出请求的帧id与之前存储的帧id进行比较,如果它们匹配修改标头},…)

您的方法与我列出的方法之间的差异

在您的方法中,您使用异步消息在请求发送后检索有关帧的信息,在我的方法中,您将为您准备好这些信息,而无需执行任何进一步的消息传递,因此每当发生请求时,您都可以立即使用它们


希望您会觉得这很有帮助,祝您好运。

是的,我想这可能管用,谢谢!我不确定是否有任何保证保证onCompleted for the frame会在onBeforeSendHeaders for subresource for the frame之前运行,但我可以使用onBeforeRequest,这应该可以做到。是的,我认为这可能会奏效,谢谢!我不确定是否有任何保证保证onCompleted for the frame会在onBeforeSendHeaders for the frame中的子资源之前运行,但我可以使用onBeforeRequest,它应该可以做到这一点。