所以我正在尝试 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+,稳定)。这是预期的,还是我做错了什么?