0
現在、サービスワーカーフェッチイベントを使用しています。フェッチAPIを使用して、サーバーにリクエストを送信してHTMLを取得します。私が実行している問題には、POSTリクエストが含まれています。 POSTがあるときにこれを実行しようとすると、POSTリクエストですべてのヘッダーが失われています(データを投稿用にサーバーに追加する必要があります)。手動でヘッダーを取得してフェッチに追加しようとしていますが、運が無ければありません。ここでフェッチイベントのために私の現在のコードされていますサービスワーカーのJavascriptで取得する
self.addEventListener("fetch", function(event) {
var acceptHeader = event.request.headers.get('Accept');
//fetch options used for post requests
var fetchOptionsForPost = {
method: "post",
headers: event.request.headers,
credentials: event.request.credentials
}
//if it's a post request,
if(acceptHeader.indexOf('text/html') > -1 && event.request.method == "POST") {
var updatedFetch = fetch(event.request, fetchOptionsForPost).then(function(updatedResponse) {
//do something with response here.
});
}
});
更新:
はcrdumoulの提案に打撃を与え、次のコンソールエラーを与える:
ServiceWorker.js:52 Uncaught (in promise) TypeError: Failed to execute 'fetch' on 'ServiceWorkerGlobalScope': Cannot construct a Request with a Request whose mode is 'navigate' and a non-empty RequestInit.
at TypeError (native)
at [URL to service worker]
次のエラーでショット、ことを与えた: ServiceWorker.js:52キャッチされない(約束で)例外TypeErrorは:「ServiceWorkerGlobalScope」on「にフェッチ」を実行できませんでした:そのモード「ナビゲートであるリクエストでリクエストを構築することはできません'と空ではないRequestInit。 at TypeError(ネイティブ) [サービス担当者のURL] –
fetchOptionsForPostで "mode"を "no-cors"に設定してみてください。また、元のリクエストでinitオブジェクトを渡すのではなく、フェッチの新しいRequestを作成することもできます。 – crdumoul
"no-cors"とフェッチの新しいリクエストを追加しようとしました。しかし、サーバーは "不正なデータ"エラーで応答しています。 –