如果我运行window.open(..)
,是否可以获得该新窗口请求的响应代码?
我不会从单独的窗口中的单独服务中下载文件,但是该服务可以使用200、404和409进行响应。我需要在主窗口中正确处理此响应代码。
还有跨浏览器解决方案吗?
答案 0 :(得分:1)
简短回答no。响应代码未包含在window
对象中。
使用window.open
解决您的问题的唯一JavaScript解决方案是您的服务在文档正文中返回状态代码的副本。然后,您可以使用(ES6)进行解析:
const foo = window.open('http://stackoverflow.com');
foo.addEventListener('load', () => {
console.log(foo.document.body.innerHTML);
// or
console.log(foo.document.body.innerText);
});
一个重要的警告是,两个页面都必须位于同一域或you'll run into some cross-origin issues上。我猜这对您不起作用。
另一种解决方案是使用XMLHttpRequest创建一个blob,将文件保存到临时存储中,然后导航到那里的用户进行下载。您可以按以下步骤进行操作(adapted from this SO answer)(ES6):
const xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.addEventListener('load', () => {
if (xhr.status === 200) {
window.location = window.URL.createObjectURL(xhr.response);
} else {
// error handling
}
});
xhr.send(postData);
这假设您有一个文件,通常不会被 浏览器,如果您需要下载图片或视频等内容,请使用 the download attribute 如相关链接答案中所示。另外,取决于什么浏览器 您想要支持,此解决方案可能需要使用polyfill。 See CanIUse.另外请注意, 还会将文件加载到内存中,因此请注意大文件。
最后,最明显和最简单的解决方案是注释中提到的@charlietfl,它正在处理此服务器端。根据您使用的语言,这很容易。