首页 > 解决方案 > chrome.webRequest.onBeforeRequest.addListener 后台 Ajax 请求?

问题描述

我想更改谷歌搜索的固定地理位置国家。我发现不使用 VPN 的唯一方法是添加gl=[country_code]到 URL。我创建了一个扩展供我使用,并将该部分添加到 Google 搜索 URL 中,并且它起作用了。但是我最近发现自动完成(建议)没有更改为网页的国家/地区。也就是说,即使在谷歌主页的左下角显示“美国”,自动完成仍然设置为我的地理位置,并给出不同的列表。

经过一些测试,我发现谷歌https://www.google.com/complete/search...在后台调用,如果我附加gl=[country_code]到 URL,我可以更改自动完成的国家。但是https://www.google.com/complete/search?*像下面这样添加不起作用(modifyUrl没有被调用)。

chrome.webRequest.onBeforeRequest.addListener
(
    modifyUrl,
    {urls: [
            'https://www.google.com/search?*',
            'https://www.google.com/webhp?*',
            'https://www.google.com/complete/search?*' ],
             types: ['main_frame']},
    ['blocking']
);

有什么办法可以修改自动完成 URL?如果有更好的方法可以在不使用 VPN 的情况下更改国家/地区,我也可以使用它。

标签: google-chromegoogle-chrome-extension

解决方案


google.com 网站中的自动完成搜索

这些是通过标准 JavaScript XHR/fetch 执行的(使用 devtools 来检查请求的详细信息),因此您需要在注册 webRequest 侦听器时指定typeas ,而不是.xmlhttprequestmain_frame

地址栏中的自动完成搜索

自Chrome 71以来,这些不会报告给扩展程序。

从crbug.com/884932引用此决定背后的原因:

浏览器发起的请求本质上可能很敏感或影响浏览器功能

例如,可以通过阻止其中一些请求来轻松阻止扩展安装验证或下载同步扩展。这也可能具有其他安全隐患。

过去我们已经实施了定制的一次性解决方案来防止这样的事情(例如,我们防止扩展拦截浏览器发起的对某些网络商店 URL 的请求、安全浏览 URL、代表 NTP 发出的一个 google bar 请求等)。

在我看来,更完整的解决方案是防止扩展拦截任何非导航浏览器发起的请求。

文档也更新了:

[...] 某些请求 [...] 被隐藏 [...] https://www.google.com/chrome其他敏感请求是浏览器功能的核心

在默认的新/空选项卡中自动完成搜索

中间的输入框是一个“fakebox”,只关注地址栏,所以和上一节提到的地址栏搜索是一样的。搜索框被实现为真正的输入(参见crbug.com/243926),但它仍然是核心浏览器 UI 的一部分,因此不会暴露给扩展的 webRequest。


推荐阅读