使用webRequest API拦截脚本请求,对其进行编辑并将其发送回

时间:2019-03-16 16:24:09

标签: google-chrome-extension google-chrome-devtools chrome-webrequest

正如标题所述,我试图拦截来自用户页面的脚本请求,从后台对脚本URL进行GET请求,添加一些功能,然后将其发送回用户。

一些警告:

  • 我不想在每个脚本请求中都这样做
  • 我仍然必须保证脚本标签按原始顺序执行

到目前为止,我提供了两种解决方案,但都无法正常工作。基本代码:

chrome.webRequest.onBeforeRequest.addListener(
  function handleRequest(request) {
    // First I make the get request for the script myself SYNCHRONOUSLY,
    // because the webRequest API cannot handle async.
    const syncRequest = new XMLHttpRequest();
    syncRequest.open('GET', request.url, false);
    syncRequest.send(null);
    const code = syncRequest.responseText;
  },
  { urls: ['<all_urls>'] },
  ['blocking'],
);

现在,有了代码,我尝试了两种方法将其重新插入页面。

  1. 我通过端口将代码发送到内容脚本,该脚本会将其添加到<script></script>标签内的页面中。除了代码,我还发送了一个索引,以确保脚本以正确的顺序重新插入到页面中。这对我的虚拟网站来说效果很好,但在youtube等较大的应用程序上却无法正常工作,因为该应用程序无法加载大多数视频的图像。有关发生这种情况的任何提示?
  2. 我返回到数据URL的重定向:

    if (condition) return { cancel: false }
    else return { redirectUrl: 'data:application/javascript; charset=utf-8,'.concat(alteredCode) };
    

第二个选项破坏了代码格式,有时会删除空格,有时会缩短空格。我不确定这种行为背后的原因,这可能与数据网址规范有关。

我被困住了。我已经在此网站上研究了几乎所有相关答案,但找不到任何东西。 非常感谢您的帮助或信息!

感谢您的宝贵时间!!!

0 个答案:

没有答案