declarativeWebRequest (現在ベータ版; 25.0.1364.0 を使用しています) をContent-Type
使用して http 応答のヘッダーを置き換える単純な Chrome 拡張機能を作成しようとしています。
コードは、メソッドを変更したCatifierの例に基づいています。registerRules
var RequestMatcher = chrome.declarativeWebRequest.RequestMatcher;
var RemoveResponseHeader = chrome.declarativeWebRequest.RemoveResponseHeader;
var AddResponseHeader = chrome.declarativeWebRequest.AddResponseHeader;
function registerRules() {
var changeRule = {
priority: 100,
conditions: [
// If any of these conditions is fulfilled, the actions are executed.
new RequestMatcher({
contentType: ['audio/mpeg']
}),
],
actions: [
new RemoveResponseHeader({name: 'Content-Type'}),
new AddResponseHeader({name: 'Content-Type', value: 'application/octet-stream'}),
new AddResponseHeader({name: 'X-ChromeExt-Content-Type', value: 'trap'})
]
};
var callback = function() {
if (chrome.extension.lastError) {
console.error('Error adding rules: ' + chrome.extension.lastError);
} else {
console.info('Rules successfully installed');
chrome.declarativeWebRequest.onRequest.getRules(null,
function(rules) {
console.info('Now the following rules are registered: ' +
JSON.stringify(rules, null, 2));
});
}
};
chrome.declarativeWebRequest.onRequest.addRules(
[changeRule], callback);
}
ルールが登録されているという意味では問題なく動作し、ブラウザー コンソールから次のフィードバックを受け取りました。
Now the following rules are registered: [
{
"actions": [
{
"instanceType": "declarativeWebRequest.RemoveResponseHeader",
"name": "Content-Type"
},
{
"instanceType": "declarativeWebRequest.AddResponseHeader",
"name": "Content-Type",
"value": "application/octet-stream"
},
{
"instanceType": "declarativeWebRequest.AddResponseHeader",
"name": "X-ChromeExt-Content-Type",
"value": "trap"
}
],
"conditions": [
{
"contentType": [
"audio/mpeg"
],
"instanceType": "declarativeWebRequest.RequestMatcher"
}
],
"id": "_0_",
"priority": 100
}
]
問題は、コードが実際には何の効果ももたらさないことです。つまり、http 応答ヘッダーは変更されないままです。これが変更されたヘッダーを表示しないChromeの (まだ修正されていない) バグに関連しているかどうかはわかりません。とにかく、次の質問があります。
1)上記は正しくRequestMatcher
適用されていますcontentType
か、それとも代わりにマッチャーを使用する必要がありますかresponseHeaders
(どういうわけか指摘されていContent-Type
ます)?
2)RequestMatcher
に適用する必要がある場合responseHeaders
、そのようなルールの構文は何ですか?
new RequestMatcher({
responseHeaders: // what to place here to match a value in a specific header line?
// or possibly responseHeaders['Content-Type']: ...?
})
3) ルールの実行をデバッグするにはどうすればよいですか? つまり、条件がどのように処理され、アクションが実行されるかを追跡して分析したいと考えています。これを使用しdeclarativeWebRequest
ないと、パズルになります。
前もって感謝します。