1 回答
TA贡献1859条经验 获得超6个赞
fetch
(在浏览器中,无论如何)有这样一段话约file:
网址:
目前,不幸的是,文件URL留给读者练习。
如有疑问,请返回网络错误。
通常,URLfetch
不会成功file:
。可悲的是,似乎在Firefox上,如果要提取的文件存在,则可以成功,但是如果不存在,则将引发网络错误。(我想这是有道理的,它不可以返回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.");
}
});
添加回答
举报