我知道此后我会失去很多人,但是仅在最新版本的MS Edge 42.17134.1.0中会发生此错误。至少我们可以使用某些较旧的版本(包括41.x)可以正常工作
我只是使用Fetch API将登录凭据发布到服务器,但从未进行调用。 Edge只是完全跳过了呼叫。
这似乎不是Fetch的问题,因为我尝试了jQuery和$ post,并且其行为完全相同。这是代码,当然带有伪造的凭证。您会注意到,在其他所有浏览器(甚至是IE)上,它都会返回相应的错误用户名/密码错误。
document.getElementById("basicFetchButton").addEventListener("click", function(){
return fetch('http://fldvd-apinet01.ad.nova.edu/appcentral/appcentral/auth/token', {
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: 'grant_type=password&client_id=appcentral&username=user&password=test',
method: 'POST'
}).then((data) => {
if (data.ok) {
return data.json();
}
return data.json()
.then((err) => {
throw err;
});
});
});
这里是指向JsFiddle
的链接任何想法或建议将不胜感激。
答案 0 :(得分:0)
对不起,我迟到了。在使网站与Edge 41(EdgeHTML 16)和Safari 10向后兼容的同时,我们遇到了fetch
的本机Edge版本的问题。
我们的问题是站点上存在cookie,并且与服务器上存储的cookie匹配,但是在我们的fetch
请求期间,某些cookie并未传输。真是头疼与您的问题不太一样,但是解决方案可能会为您提供帮助。
它的不足之处是安装了fetch
polyfill(polyfill的源),并修改了执行polyfill的条件。
在这里读书带给我我的主意GitHub。 dgraham 建议在
中为fetch
包装一个polyfill
if (self.fetch && self.Headers.prototype.entries) {
这对我不起作用,因为我的目标是仅在以下情况下加载polyfill:
1)self.fetch
不存在。
2)“ self.fetch”确实存在,但它是Edge的EdgeHTML版本。
我们如何确定self.fetch
存在,但用户正在使用EdgeHTML版本查看?我发现Edge版本41.16299-44.18362(最新的EdgeHTML版本)执行!!self.Headers.prototype.entries.prototype
为true
。使用BrowserStack.com或VM Win10计算机在Edge 40、41、42、44版本上对此进行了测试。
大多数其他浏览器以false
的身份执行测试。以下是对此测试执行false的浏览器列表:
从 dgraham 返回GitHub上的帖子。某些浏览器的确具有fetch
和Headers
的本机代码,而!!self.Headers.prototype.entries
的测试结果为false。因此 dgraham 是正确的,我们需要对此进行测试。在执行false
时,我发现测试过!!self.Headers.prototype.entries
的浏览器列表为:
很抱歉这么长。这是我将fetch
polyfill包裹在其中的代码:
var loadPoly = false
if(!self.fetch){loadPoly = true}
if(!loadPoly && !self.Headers.prototype.entries){loadPoly = true}
if(!loadPoly && !!self.Headers.prototype.entries.prototype){loadPoly = true}
if(!!loadPoly){...