使用webRequest阻止和修改AJAX请求

5
我有一个Chrome扩展程序,目前正在使用webrequest API。我的问题很简单,是否可以使用webrequest API阻止和修改AJAX请求?如果不行,有没有解决方法?
PS. 我正在尝试将一些HTML代码注入到GMail电子邮件中,但目前唯一找到的解决方法是检测所有不同类型的撰写方式,然后再注入我的HTML。这种方法还可以,但不稳定,只有大约70%的时间插入才能生效。
如果有更好的方法,请告诉我,谢谢!
编辑
如果有人需要,我发现了一些替代解决方案。
1. 重写默认的XMLHttpRequest.send方法来广播事件。在发送请求之前,您可以修改请求。
2. 重写默认的表单提交方法,并在提交之前拦截所有表单提交(修改表单数据)。

此外,ehre:https://stackoverflow.com/q/23561805/632951 - Pacerier
2个回答

2
尽管您可以通过将chrome.webRequest的类型属性显式设置为“xmlhttprequest”来检测XMLHttpRequests,但您只能阻止异步请求。
从您的扩展程序发出的同步XMLHttpRequests会被隐藏,以防止死锁。此外,webRequest API仅会公开在清单文件的权限区域中定义的URI模式调用。

没错,我已经阻止了来自mail.google.com的请求,特别是像你所说的XMLHttpRequests。但是,使用webrequest修改这些请求的responseBody是否可能呢?我尝试过,但似乎不支持这样做。 - 1337holiday
据我了解,您只能使用阻塞方法来修改responseHeaders对象。正好有一个挂起的功能请求,可以提供您想要的完全控制 https://code.google.com/p/chromium/issues/detail?id=104058 - QFDev
关键部分是“从您的扩展程序发出的同步XMLHttpRequests”,因此您可以处理来自其他来源的同步XHR。而问题明确表明这是页面自己的请求。 - Xan

2
目前使用webRequest api无法访问或修改响应正文。在chromium中有一个未解决的问题,请求添加此功能。他们最近已经实现了访问请求正文的能力,因此可能也会添加这个功能。
您可以尝试使用修改XMLHttpRequest对象的技术,如这个答案所述。这里有一个逐步案例研究,其中拦截并修改了AJAX响应。

我有一种感觉,认为这似乎是不可能的,但真希望他们能尽快实现它。感谢这些好链接,应该会是一次有趣的阅读! - 1337holiday
@rsanchez,但是问题的提问者只想要屏蔽,这不是可以做到吗? - Pacerier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接