だから私は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()
して通知する必要があります)。実際の Web ページを試す代わりに、多くの XHR をデバッグする必要があるため、これは非常に不便です。
編集:@RobWによって確認されました。これはバグであるため、crbug.comに属しています...
より大きな問題は、load イベントの前の最後のリクエストで変更が行われなかった場合、pageAction アイコンが表示されないことです。
たとえば、ページに 4 つのリクエストが含まれている場合:
HTML -> 変更のトリガー
CSS
JS
【ロードイベント】
内部の HTML
iframe
-> 変更のトリガー
pageAction アイコンは残ります。
ただし、ページに 3 つのリクエストが含まれている場合:
HTML -> 変更のトリガー
CSS
JS
【ロードイベント】
pageAction アイコンが表示されたり消えたりします (低速の XP マシンではこれを確認できますが、高速のマシンでは表示されません)。
しかし、XHR を手動で作成すると (変更がトリガーされます)、pageAction アイコンはアドレス バーに正しく表示されます。
拡張機能が有効であることをユーザー (存在する場合) に知らせる必要があるため、この問題は厄介です。
Win 7 と XP、最新の Chrome (21+、安定版) でも同じことが起こりました。これは予想どおりですか、それとも何か間違っていますか?