Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用webRequest取消另一个扩展发出的请求_Javascript_Html_Google Chrome_Google Chrome Extension_Google Chrome App - Fatal编程技术网

Javascript 使用webRequest取消另一个扩展发出的请求

Javascript 使用webRequest取消另一个扩展发出的请求,javascript,html,google-chrome,google-chrome-extension,google-chrome-app,Javascript,Html,Google Chrome,Google Chrome Extension,Google Chrome App,我已经成功地使用WebRequestAPI阻止了我访问的网站上的所有XMLHttpRequest。然而,我的目标是绕过学校Chromebook上安装的内容安全过滤器。该扩展通过读取选项卡的URL并向其服务器发送xmlhttprequest来询问网站是否被阻止。我已经确定,如果我取消对其服务器的所有这些XMLHttpRequest,则不会阻止任何网站 我正在使用以下代码拦截所有xmlhttprequests chrome.webRequest.onBeforeSendHeaders.addList

我已经成功地使用WebRequestAPI阻止了我访问的网站上的所有XMLHttpRequest。然而,我的目标是绕过学校Chromebook上安装的内容安全过滤器。该扩展通过读取选项卡的URL并向其服务器发送xmlhttprequest来询问网站是否被阻止。我已经确定,如果我取消对其服务器的所有这些XMLHttpRequest,则不会阻止任何网站

我正在使用以下代码拦截所有xmlhttprequests

chrome.webRequest.onBeforeSendHeaders.addListener(function(details){
    if(details.type=='xmlhttprequest')
    {
        return{cancel:true};
    }
},{urls: ['<all_urls>']},['blocking', 'requestHeaders']);
chrome.webRequest.onBeforeSendHeaders.addListener(函数(详细信息)){
if(details.type='xmlhttprequest')
{
返回{cancel:true};
}
},{url:['']},['blocking',requestHeaders']);
此代码非常适用于阻止来自任何网站的请求(例如,启用此扩展后无法播放spotify音乐)。但是OnBeforeSendHeader似乎忽略了从扩展发出的请求。因此,此代码无法阻止学校扩展发送到其服务器的xmlhttprequests。我也有代码用onHeadersReceived和onBeforeRequest阻止XMLHttpRequest,但它们都有相同的问题。它们阻止从网站发出的请求,但如果请求是从扩展发出的,则不会识别该请求

奇怪的是,有时这段代码实际上是有效的,它会阻止来自扩展的请求,但大多数情况下(比如99%),它会忽略这些请求是否有办法确保我的分机不会忽略来自其他分机的请求?

我知道你会说我不应该绕过学校的网络过滤器,因为这是错误的,否则我会有麻烦。但我这么做只是因为我喜欢把事情弄清楚,我不会把它用于那些会给我或学校带来麻烦的事情。此外,我还做了其他类似的扩展,最近得到了修复,每个使用它们的人都希望我更新/修复我的应用程序

有没有办法确保我的分机不会忽略来自另一个分机的请求

不。过去可以拦截来自其他扩展和应用程序的请求,但这被认为是一种错误,因为您可能会为更高权限的扩展而污染数据


因此,可以确保您将忽略这些请求。

可能与扩展的加载顺序有关。您可以在应用程序中使用webview来防止扩展干扰@DanielHerr有趣的是,你这么说,我不久前做了一个扩展,名为“解除所有封锁”,它确实做到了这一点。但是使用webview来代替chrome还有一些明显的局限性。@Tibrogargan我觉得这可能就是问题所在。但据我所知,无法控制扩展的加载/执行顺序。我试着确保我的分机被分配了一个ID,这个ID按字母顺序排在学校分机之前,但这并不能解决我的问题。我试着去检查一下,听听其他分机的请求。请注意使用where时的注意事项,其中指出“为了防止死锁,扩展中的同步XMLHttpRequests也被隐藏起来,以阻止事件处理程序。”