正如标题所说,我正在尝试拦截来自用户页面的脚本请求,从后台向脚本 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'],
);
现在,一旦我们有了代码,我就尝试了两种方法将其重新插入到页面中。
- 我通过端口将代码发送到内容脚本,该脚本会将其添加到
<script></script>标签内的页面中。除了代码之外,我还发送了一个索引,以确保脚本以正确的顺序重新插入到页面中。这适用于我的虚拟网站,但它会在更大的应用程序上中断,比如 youtube,它无法加载大多数视频的图像。关于为什么会发生这种情况的任何提示? 我将重定向返回到数据 url:
if (condition) return { cancel: false } else return { redirectUrl: 'data:application/javascript; charset=utf-8,'.concat(alteredCode) };
第二个选项会破坏代码格式,有时会删除空格,有时会缩短空格。我不确定这种行为背后的原因,它可能与数据 url 规范有关。
我被困住了。我已经研究了这个网站上几乎所有相关的答案,但找不到任何东西。非常感谢任何帮助或信息!
谢谢你的时间!!!