Typescript 如何测试iframe并获取所有响应头?

Typescript 如何测试iframe并获取所有响应头?,typescript,iframe,http-headers,Typescript,Iframe,Http Headers,我正在开发一个可以在iframe中显示url的Web应用程序。但它也能够在iframe中显示url之前先测试url。因此,在显示iframe(设置CSS规则以显示iframe元素)之前,我想等待响应。如果我得到一个错误或如果我得到一个响应标题“x-frame-options:DENY”,我不想显示iframe,而是显示一条错误消息或其他东西 考虑这个例子: const request = new XMLHttpRequest(); request.open("GET", urlToTest, t

我正在开发一个可以在iframe中显示url的Web应用程序。但它也能够在iframe中显示url之前先测试url。因此,在显示iframe(设置CSS规则以显示iframe元素)之前,我想等待响应。如果我得到一个错误或如果我得到一个响应标题“x-frame-options:DENY”,我不想显示iframe,而是显示一条错误消息或其他东西

考虑这个例子

const request = new XMLHttpRequest();
request.open("GET", urlToTest, true);
request.send();
在这里我总是得到一个CORS问题。但这是意料之中的,测试这一点与我们实际想要做的不同,即:

<iframe id="webiframe" "src"="urlToTest></iframe>
但是不会调用添加到contentDocument的事件侦听器。唯一调用的事件是iframe引用的onload事件

所以我的问题是:

const request = new XMLHttpRequest();
request.open("GET", urlToTest, true);
request.send();

在iframe上设置“src”属性时,是否可以获取iframe的一些信息/测试。更具体地说,如果url起作用,如果不起作用,为什么它不通过响应标题起作用?

您应该能够访问框架上的
webiframe.location.href
属性以获取url。如果您打开了框架,您应该已经有了此信息。如果正确的CORS标题不在适当的位置,您可能无法获得有关框架的任何详细信息

也可以从
窗口访问帧。如果您是父级,则可以从
数组访问帧。您也可以按照另一个答案中的建议进行尝试


注意:CORS旨在明确阻止浏览器中未经授权的跨域访问。基于服务器的代理解决方案可能允许您进行单独的查询、测试URL或收集信息。

在Chrome中,它不使用webiframe、contentDocument上的属性。要设置onload函数,您可以这样做:this.webiframe.onload=…是否可以修改框架页面的内容以包含脚本,然后使用跨文档消息传递与加载的父页面通信?否,它可以是用户需要显示的任何url。我不知道那是什么。跨文档消息是不可能的,因为我不知道哪个URL需要测试,用户可以在我们的应用程序中输入任何URL,然后我需要知道这个URL是否会显示在iframe中,在iframe中显示之前。@MartijnvandenBergh-CORS旨在防止这种情况,因为它会导致跨域的信息泄漏。您正试图在浏览器中绕过此安全功能。代理解决方案可能是更好的方法。您需要添加服务器端组件。是的,一位同事也提出了此解决方案。我希望这在前端是可能的。谢谢你的确认!我要给你奖金,因为这可能是唯一的解决办法。@MartijnvandenBergh-谢谢!非常感谢,祝你好运。