1

正如标题所说,我正在尝试拦截来自用户页面的脚本请求,从后台向脚本 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) };
    

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

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

谢谢你的时间!!!

4

0 回答 0