javascript - Chrome 扩展 : Block page items before access

标签 javascript google-chrome block

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

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

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

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

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

我现在如何做的例子:

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"]
);

最佳答案

在返回原始Response内容或新内容之前,您可以使用ServiceWorker读取原始Response

if ("serviceWorker" in navigator) {
  navigator.serviceWorker.register("sw.js").then(function(reg) {
    console.log("register", reg);
  }).catch(function(err) {
    console.log("err", err);
  });
}

self.addEventListener("fetch", function(event) {
  if (event.request.url == "/path/to/fetched/resource/") {
    console.log("fetch", event);
    event.respondWith(
      fetch(event.request).then(function(response) {
        return response.text()
          .then(function(text) {
            if (text === "abc123") {
              return new Response("def456")
            } else {
              return new Response(text)
            }
          })
      })
    );
  }
});

plnkr https://plnkr.co/edit/MXGSZN1i3quvZhkI7fqe?p=preview

参见 What happens when you read a response?

关于javascript - Chrome 扩展 : Block page items before access,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41281291/

相关文章:

ruby - 在 Ruby 中根据用户输入创建哈希数组

c# - 限制 block 只能在从 EpiServer 中的某个接口(interface)继承的 ContentArea 中使用

javascript - 根据条件语句vuejs更改img src

javascript - 在ajax响应中加载列表对象并使用此数据创建动态列表div

javascript - 测试浏览器是否支持该样式

javascript - 在 Javascript 中嵌入 Javascript(我是认真的)?

css - 对齐内嵌 block Div 中的文本? CSS

javascript - 访问 "calling scope"和奇怪的行为

google-chrome - 从浏览器捕获系统声音

css - 基于 CSS 的选项卡的无序列表 - Chrome 问题