2

所以我正在尝试 Chrome API webRequest。一切都按要求正常工作,但在响应时,我遇到了问题。

我的测试非常简单:

function func(obj)
{
    var resHeaders=obj.responseHeaders;
    for(var i=0;i<resHeaders.length;i++)
    {
        if(resHeaders[i].name=="X-Powered-By" && resHeaders[i].value.indexOf("PHP")>=0)
        {
            resHeaders[i].value="Extension";
            resHeaders.push({name:"X-Test",value:"Found"});
            chrome.pageAction.show(obj.tabId);
            break;
        }
    }
    return {responseHeaders:resHeaders};
}

chrome.webRequest.onHeadersReceived.addListener(func,{urls:["<all_urls>"]},["blocking","responseHeaders"]);

令我惊讶的是,即使标题已正确修改,Chrome 开发者工具总是显示原始标题(我必须用它 XMLHttpRequest.getAllResponseHeaders()来告诉)。这很不方便,因为我必须制作许多 XHR 来调试,而不是在现实世界的网页上尝试。

编辑:@RobW 确认,这是一个错误,所以它属于 crbug.com ......


更大的问题是,如果没有在加载事件之前的最后一个请求上进行修改,pageAction 图标将不会显示。

例如,如果一个页面包含四个请求:

HTML -> 触发修改

CSS

JS

[加载事件]

HTML inside iframe-> 触发修改

pageAction 图标保持不变;

但是如果一个页面包含三个请求:

HTML -> 触发修改

CSS

JS

[加载事件]

pageAction 图标会出现然后消失(我可以在慢速 XP 机器上看到它;在快速机器上它只是不显示)。

但是,如果我随后手工制作了 XHR(触发修改),则 pageAction 图标正确地停留在地址栏上。

这个问题很烦人,因为我必须让用户(如果有的话)知道扩展是有效的。


同样的事情发生在 Win 7 和 XP,最新的 Chrome(21+,稳定)。这是预期的,还是我做错了什么?

4

0 回答 0