目前,我使用POST表单下载文件:
var form = document.createElement("form");
var element1 = document.createElement("input");
var element2 = document.createElement("input");
form.target = "_blank";
form.method = "POST";
form.action = path;
element1.value = authService.getToken();
element1.name = "Authorization";
form.appendChild(element1);
element.append(form);
form.submit();
element.empty();
为了防止当服务器没有发送正确的标题时当前页面的位置发生变化,我打开将表单的目标设置为" _blank",这样如果发生错误,它显示在另一页上。但问题是浏览器默认阻止新标签,我不想强迫用户允许这样的行为。我已经读过,也可以选择将iframe的id指定为目标。它会在我的情况下工作吗?然后,我如何从iframe中读取错误以向用户显示?
答案 0 :(得分:1)
我正在研究这个问题。我发现从iframe返回状态的最佳答案是在其中设置一个cookie。理想情况下,cookie的名称应该是特定下载事件(我使用的是guid)所特有的,两个页面都知道,并且其值可能是错误消息,或者为成功而为空。然后父页面在javascript中轮询此cookie。如果出现错误,我确保下载URL总是呈现cookie,因为很难学习iframe状态的其他任何内容。成功后,JS轮询器可以隐藏“您的下载将很快开始”消息,并删除cookie。如果失败,请执行这些操作并显示错误。
未解决的最大问题是它在移动浏览器中的效果如何。 Popups是一个糟糕的选择,因为他们大多默认阻止他们没有提示......但是有一个jQuery插件在那里为iframe下载,当它看到移动时,回到弹出窗口。这吓到我了。