所以我正在尝试 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 来调试而不是
尝试现实世界的网页。
Edit:经@RobW确认,这是一个bug,所以它属于crbug.com...
更大的问题是,如果没有对加载事件之前的最后一个请求进行修改,则 pageAction 图标将不会显示。
例如。
如果一个页面包含四个请求:
HTML -> 触发修改
CSS
JS
[加载事件]
里面有 HTMLiframe
-> 触发修改
pageAction 图标保持不变;
但如果一个页面包含三个请求:
HTML -> 触发修改
CSS
JS
[加载事件]
pageAction 图标会显示并消失(我可以在慢速 XP 机器上看到这一点;在快速机器上它只是不显示)。
但是,如果我随后手工制作 XHR(触发修改),则 pageAction 图标会正确保留在地址栏上。
这个问题很烦人,因为我必须让用户(如果有的话)知道扩展已经生效。
同样的情况也发生在 Win 7 和 XP、最新的 Chrome(21+,稳定)上。这是预期的,还是我做错了什么?