google-chrome-extension - 如何将 chrome 扩展连接到网络浏览器流量
问题描述
我正在尝试编写一个 chrome 扩展来拦截网络流量并修改数据。
如果有人能准确地告诉我应该为此使用哪个 API 以及在哪里可以找到文档,我将不胜感激。
解决方案
使用webRequest API 并查看它们的事件。
创建一个具有权限的清单,activeTab
以获取您所在的当前选项卡的权限,以及您希望为其启用扩展程序的url 模式。webRequestBlocking
需要专门设置权限以阻止和修改流量。
清单.json
{
"manifest_version": 2,
"name": "network intercepter",
"description": "intercept/modify/block data",
"version": "1.0",
"background": {
"scripts": ["background.js"]
},
"permissions": [
"activeTab",
"https://*.google.com/*",
"webRequest",
"webRequestBlocking"
]
}
创建一个后台脚本并根据您要执行的操作开始添加 webRequest 侦听器。在做出这些选择时,这对我很有用。
背景.js
var onBeforeSendHeadersListener = function(details) {
// view request + headers to be send
console.log(details);
// block XMLHttpRequests by returning object with key "cancel"
if (details.type == "xmlhttprequest") {
return {
cancel: true
};
}
// modify the user agent of all script resources by changing the requestHeaders and then return an object with key "requestHeaders"
if (details.type == "script") {
for (var i = 0; i < details.requestHeaders.length; i++) {
if (details.requestHeaders[i].name == "User-Agent") {
details.requestHeaders[i].value = "I'm not a bot";
}
}
return {
"requestHeaders": details.requestHeaders
};
}
}
var onBeforeRequestListener = function(details) {
// all images will now be loaded from this location instead
// CAREFUL! CROSS ORIGIN REQUESTS WILL NOT BE BLOCKED WITH CHROME EXTENSIONS
if (details.type == "image") {
return {
"redirectUrl": "https://foo.bar/image.jpg"
};
}
}
chrome.webRequest.onBeforeSendHeaders.addListener(onBeforeSendHeadersListener, {
urls: ["https://*.google.com/*"]
}, ["requestHeaders", "blocking"]);
chrome.webRequest.onBeforeRequest.addListener(onBeforeRequestListener, {
urls: ["https://*.google.com/*"]
}, ["requestBody", "blocking"]);
访问 chrome://extensions 并打开后台页面,然后转到其控制台。然后正常访问https://google.com,你会看到所有的图片都换到了新的位置,XHR的被屏蔽了,脚本资源的User Agent也发生了变化,在后台控制台你会发现请求被制作了。
推荐阅读
- c++ - 动态加载 dll 并使用其类方法
- javascript - 如何在 redux 中控制布尔值?
- react-native - 如何找到两个元素 React Native 之间的距离?
- java - 一行在spring boot Jpa .findall()响应restfull api中重复多次
- wpf - 从资源字典中的事件处理程序调用 Viewmodel 方法
- python - 在 Keras 中使用 CNN 模型获得非常差的准确性
- r - 在R中绘制不同颜色的时间序列
- python - 如何散列一个矩阵
- .net - Trace.CorrelationManager.ActivityId 的 ECS 字段引用中的等价物是什么?
- c# - C# 使用动态键反序列化 JSON