google-chrome - 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.com 网站中的自动完成搜索
这些是通过标准 JavaScript XHR/fetch 执行的(使用 devtools 来检查请求的详细信息),因此您需要在注册 webRequest 侦听器时指定type
as ,而不是.xmlhttprequest
main_frame
地址栏中的自动完成搜索
自Chrome 71以来,这些不会报告给扩展程序。
从crbug.com/884932引用此决定背后的原因:
浏览器发起的请求本质上可能很敏感或影响浏览器功能
- https://update.googleapis.com/service/update2(组件更新程序)
- https://www.googleapis.com/chromewebstore/v1.1/items/verify(安装签名者,用于扩展安装验证)
- https://clients2.googleusercontent.com/crx/blobs ....(同步后下载crx包)
- https://lh3.googleusercontent.com/ ....(从网上商店触发的安装对话框上的扩展图标)
- https://www.google.com/complete/search?client=chrome-omni ..(与多功能框相关)
- https://www.google.com/async/ddljson?async=ntp:1(与ntp doodle有关)
- https://www.google.com/chromesuggestions?t=1
- https://cuscochromeextension-pa.googleapis.com/v1/omniboxsuggestions
- https://googleapis.com/oauth2 ...(调用 gaia url)
例如,可以通过阻止其中一些请求来轻松阻止扩展安装验证或下载同步扩展。这也可能具有其他安全隐患。
过去我们已经实施了定制的一次性解决方案来防止这样的事情(例如,我们防止扩展拦截浏览器发起的对某些网络商店 URL 的请求、安全浏览 URL、代表 NTP 发出的一个 google bar 请求等)。
在我看来,更完整的解决方案是防止扩展拦截任何非导航浏览器发起的请求。
文档也更新了:
[...] 某些请求 [...] 被隐藏 [...] https://www.google.com/chrome和其他敏感请求是浏览器功能的核心。
在默认的新/空选项卡中自动完成搜索
中间的输入框是一个“fakebox”,只关注地址栏,所以和上一节提到的地址栏搜索是一样的。搜索框被实现为真正的输入(参见crbug.com/243926),但它仍然是核心浏览器 UI 的一部分,因此不会暴露给扩展的 webRequest。
推荐阅读
- python - 使用 Python 对象和 Neo4j - 能够存储对象,例如 pandas 数据帧/字典
- excel - 基本问题 - 为什么将 CSV 转换为文本文件时会出现额外的字符?
- r - 保持 {ggimage} 中的原始图像比例
- java - 返回包含用户在弹性搜索中输入的关键字的字符串列表
- django - 使用 Pytest 测试 DJango 模块中的“if 语句”
- java - 如何使用 compareTo() 方法按字母顺序对字符串进行排序?
- angular - Angular 6 - 取消订阅管道
- javascript - 为什么将文本复制到剪贴板时不应用新行
- uiview - 试图用 UIView 掩盖 UIButton 中的文本
- reactjs - Visual Studio Code:如何为 TSX 组件启用 props 自动完成