javascript - 可以从父窗口访问响应代码吗?

标签 javascript window.open

如果我运行window.open(..)是否可以获得这个新窗口请求的响应代码?

我不想在单独的窗口中从单独的服务下载文件,但该服务可以响应 200、404 和 409。我需要在主窗口中正确处理此响应代码。

还有跨浏览器的解决方案吗?

最佳答案

简短回答,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 在评论中提到的,那就是处理服务器端。根据您使用的语言,这相当简单。

关于javascript - 可以从父窗口访问响应代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53306218/

相关文章:

javascript - 如何在 JavaScript 中打印对象中的两个数组列表

javascript - 只有在弹出窗口之外单击才能关闭弹出窗口 - 如果在弹出窗口内部或上单击则不应将其关闭

javascript - 将 popupWindow = window.open 与 JavaScript 变量一起使用

jquery - 如何给onClick window.open添加5秒延迟?

javascript - 如何使用 JavaScript 在其他窗口之上打开一个新窗口?

javascript - 使用 window.open() AND ' 的多个窗口

javascript - Zend 框架 : Inserting calls to View Helpers into Javascript code

javascript - session 存储在 window.location.replace 上丢失

JavaScript getElementById 空值错误以及如何避免它

javascript - 使用 Javascript window.open 和 jQuery 提交表单