を、あなたは1つに同様のソリューションを試してみましたあなたが言及した質問(How to alter the headers of a Response?)?
Service Worker Cookbookでは、Requestedオブジェクトを手動でコピーしてIndexedDB(https://serviceworke.rs/request-deferrer_service-worker_doc.html)に格納しています。これは別の理由によるものです(キャッシュに格納したかったが、https://github.com/slightlyoff/ServiceWorker/issues/693のためにPOSTリクエストを保存できない)が、あなたのやりたいことにも当てはまるはずです。それはnavigate
(あなたが例外を取得した理由です)、あなたの場合は
// request is event.request sent by browser here
var req = new Request(request.url, {
method: request.method,
headers: request.headers,
mode: 'same-origin', // need to set this properly
credentials: request.credentials,
redirect: 'manual' // let browser handle redirects
});
あなたが使用することはできません元mode
:新しいリクエストオブジェクトを作成
// Serialize is a little bit convolved due to headers is not a simple object.
function serialize(request) {
var headers = {};
// `for(... of ...)` is ES6 notation but current browsers supporting SW, support this
// notation as well and this is the only way of retrieving all the headers.
for (var entry of request.headers.entries()) {
headers[entry[0]] = entry[1];
}
var serialized = {
url: request.url,
headers: headers,
method: request.method,
mode: request.mode,
credentials: request.credentials,
cache: request.cache,
redirect: request.redirect,
referrer: request.referrer
};
// Only if method is not `GET` or `HEAD` is the request allowed to have body.
if (request.method !== 'GET' && request.method !== 'HEAD') {
return request.clone().text().then(function(body) {
serialized.body = body;
return Promise.resolve(serialized);
});
}
return Promise.resolve(serialized);
}
// Compared, deserialize is pretty simple.
function deserialize(data) {
return Promise.resolve(new Request(data.url, data));
}
「ナビゲート」の「モード」が問題になるのはなぜですか? – mjs
https://fetch.spec.whatwg.org/#dom-requestのステップ12.1:「リクエストのモードが「ナビゲート」の場合は、TypeErrorをスローします。」 – Marco