1 回答

TA貢獻1859條經驗 獲得超6個贊
fetch
(在瀏覽器中,無論如何)有這樣一段話約file:
網址:
目前,不幸的是,文件URL留給讀者練習。
如有疑問,請返回網絡錯誤。
通常,URLfetch
不會成功file:
??杀氖牵坪踉贔irefox上,如果要提取的文件存在,則可以成功,但是如果不存在,則將引發網絡錯誤。(我想這是有道理的,它不可以返回HTTP狀態代碼;它不使用HTTP。)在Chrome和Edge上,無論文件是否存在,它始終會失敗。在某些瀏覽器(例如Chrome)中,舊版本XMLHttpRequest
也沒有(但是在其他瀏覽器(例如Firefox)中)。
fetch
/XMLHttpRequest
和href
頁面的設置之間的主要區別在于,在前一種情況下,頁面A上的代碼能夠讀取頁面B的內容;但在后一種情況下,它不能-可以轉到頁面B,但不能讀取頁面B的內容。頁面A替換為頁面B。
如果XMLHttpRequest
在我們現在居住的安全環境中進行標準化,我懷疑它也將明確禁止訪問file:
URL。
由于Firefox將不存在的文件視為NetworkError,因此您的代碼(僅適用于Firefox)可能是:
// With file: URLs, this ONLY works in Firefox
fetch(url)
.then(function(response) {
if (!response.ok) {
throw new Error("HTTP status " + response.status);
}
})
.then(function() {
window.location.href = url;
})
.catch(error => {
alert("This is the last page.");
});
也許:
fetch(url)
.then(function(response) {
return response.ok;
})
.catch(function() {
return false;
})
.then(function(flag) {
if (flag) {
window.location.href = url;
} else {
alert("This is the last page.");
}
});
您可以在那里使用箭頭功能。我不是因為你沒有,而是:
fetch(url)
.then(response => response.ok)
.catch(() => false)
.then(flag => {
if (flag) {
window.location.href = url;
} else {
alert("This is the last page.");
}
});
添加回答
舉報