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()して通知する必要があります)。実際の 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+、安定版) でも同じことが起こりました。これは予想どおりですか、それとも何か間違っていますか?

4

0 に答える 0