所以我正在尝试使用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 Developer Tool始终显示原始标题 即使标题被正确修改(我必须使用
XMLHttpRequest.getAllResponseHeaders()
告诉我。这是非常的 不方便,因为我必须调试许多XHR而不是 尝试现实世界的网页。
编辑:由@RobW确认,这是一个错误,因此它属于crbug.com ...
更大的问题是,如果未在加载事件之前的最后一个请求上进行修改,则不会显示pageAction图标。
E.g。 如果页面包含四个请求:
HTML - &gt;触发修改
CSS
JS
[加载事件]
HTML
iframe
内的HTML - &gt;触发修改
pageAction图标停留;
但如果一个页面包含三个请求:
HTML - &gt;触发修改
CSS
JS
[加载事件]
pageAction图标会显示并消失(我可以在慢速的XP机器上看到它;在快速机器上它只是没有显示)。
但如果我手工制作XHR(触发修改),则pageAction图标会正确地保留在地址栏上。
这个问题很烦人,因为我必须让用户(如果有的话)知道扩展名有效。
同样的事情发生在Win 7和XP,最新的Chrome(21 +,稳定)。这是预期的,还是我做错了什么?