【问题标题】:Determining frame URL for outgoing requests, using WebRequest API使用 WebRequest API 确定传出请求的框架 URL
【发布时间】:2012-05-12 02:08:10
【问题描述】:

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

这是一个测试工具,不是普通用户的东西,所以我不介意增加一些延迟。有谁知道是否有其他方法可以做到这一点?我尝试使用 setTimeout,但它被内容安全策略阻止。使用 referrer 并不能完全减少它,因为它没有设置在来自 HTTPS 帧的 HTTP 请求上。

【问题讨论】:

    标签: google-chrome-extension


    【解决方案1】:

    我不确定我是否完全理解您要完成的工作,但这是我的想法。

    场景

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

    如果是这样,那么这就是我要尝试的方法;

    1.注册onCompleted事件监听器,该监听器将用于检索完成的请求信息,即url和frame id,并将它们存储在一个数组中。

    2.注册onBeforeSendHeaders事件监听器,用于获取请求信息并与上一步存储的信息进行比较,如果通过了可以修改headers

    所以代码会这样

    onCompleted({将信息 - 即 url 和框架 id- 存储在一个数组中},...)

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

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

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

    希望你会发现这对你有帮助,祝你好运。

    【讨论】:

    • 是的,我认为这可能行得通,谢谢!我不确定是否有任何保证框架的 onCompleted 将在该框架的子资源的 onBeforeSendHeaders 之前运行,但我可以使用 onBeforeRequest,这应该可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    相关资源
    最近更新 更多