XML ファイルをダウンロードするためのボタンを表示する Web ページを作成しようとしています。ファイルは、auth ヘッダーに Bearer Token を必要とする REST エンドポイントにリクエストを送信することによって取得されます。
次のような onclick 関数を持つボタンを作成しました。
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <bearer token here>")
var requestOptions = {
method: 'GET',
headers: myHeaders,
};
fetch('<url>', requestOptions)
.then(resp => resp.blob())
.then(blob => {
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
// the filename
a.download = 'todo-1.json';
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
alert('your file has downloaded!');
})
.catch(() => alert('Error'));
これはほとんどのブラウザーでうまく機能するようですが、Edge では、このダウンロードはユーザー ジェスチャに関連付けられていないため、Microsoft Defender SmartScreen によってブロックされます。
認証ヘッダーを使用してユーザーのジェスチャーに関連付けられたファイル ダウンロード リクエストを開始するにはどうすればよいでしょうか?
Cookie またはリクエストの本文から認証トークンを受け入れるように認証メカニズムを変更できることはわかっていますが、これは行いたくありません。