Chrome扩展程序:访问前阻止页面项

mut*_*lis 9 javascript google-chrome block

我试图在网页上阻止项目,但我想在加载之前这样做.所以,例如,我可以使用

chrome.webRequest.onBeforeRequest.addListener(...);

并重定向/取消请求.但我想检查请求的实际内容.我现在正在做的是,开始XMLHttpRequest自己加载url/object,检查内容,并在必要时阻止它.但是,主要问题是实际上没有多少对象被阻塞.这意味着,每个对象都加载了两次:一次用于"我的检查",一次,在我说"好吧,你可以加载它"之后.

如何拦截加载过程,以便我可以动态检查它并在允许的情况下传递数据字节?

希望你理解我的问题,谢谢:-)

我现在如何做的示例:

function shall_be_blocked(info){
  var xhr = new XMLHttpRequest();
  xhr.open("GET", file, false);
  //... #load the file and inspect the bytes
  if (xhr.responseText=="block it") {
     return true;
  }
  return false;
}

chrome.webRequest.onBeforeRequest.addListener(
  function(info) {
    ret = shall_be_blocked(info);
    if (ret ...){return {cancel:true};}//loads the file once, as it is getting blocked
    return {};//loads the file twice
  },
  {},["blocking"]
);
Run Code Online (Sandbox Code Playgroud)

mut*_*lis 1

我能够实现我想要做的事情。该解决方案不一定需要扩展,但对于设置代理这可能很有用。之后,解决方案(针对上面指定的问题)如下:

  • 使用 chrome 扩展来使用代理,在本例中为 localhost
  • 设置代理脚本(例如使用 python)来路由所有流量(并且可能安装证书,因此也可以分析 HTTPs 流量)
  • => 建立中间人,分析流量并根据需要进行修改

是的,这并不是真正解决让 chrome 扩展以某种方式执行此操作的问题,但目前还不可能(请参阅https://bugs.chromium.org/p/chromium/issues/detail?id=104058) 。

最好的问候,穆蒂利斯