【问题标题】:IE11: web requests not working from sandboxed iframeIE11:Web 请求在沙盒 iframe 中不起作用
【发布时间】:2020-09-23 14:02:41
【问题描述】:

我正在尝试在 javascript 中从 iframe 中向休息 API 发出 HTTP GET 请求。 iframe 是沙盒化的,但它设置了 allow-scripts 属性,并且我调用的 API 已启用以允许所有来源,因此 CORS 应该不是问题。

我在这里用最少的代码示例重新创建了场景:
http://plnkr.co/edit/jrchvxFXQQDqs2Fv

如果您转到该页面并使用任何现代浏览器(Chrome、Edge 等)预览该页面,它可以正常工作。

但是如果你用Internet Explorer 11 这样做,调用就会失败。在 javascript 控制台上,我们得到这个一般的网络错误:

但奇怪的是:调用实际上运行正常。事实上,如果我们检查网络选项卡,我们可以看到它正在执行并返回 200:

我在这里做错了什么,或者这只是通常的 IE 是 IE?

【问题讨论】:

    标签: javascript iframe internet-explorer-11


    【解决方案1】:

    我发现我们需要添加allow-same-origin 才能使其在IE 中工作。

    默认情况下,sandbox 强制 iframe 使用“不同来源”策略。换句话说,它使浏览器将 iframe 视为来自另一个来源,即使它的 src 指向同一个站点。 allow-same-origin 删除此功能。所以我认为它一开始在 IE 中失败了,因为它不符合same-origin policy

    至于IE和其他浏览器的区别,我觉得是因为不同浏览器的策略设计不同。

    我也找到了a thread关于这个问题的一些有用信息,您也可以参考它以获取更多信息。

    【讨论】:

    • 其他浏览器正确地执行同源策略恕我直言:他们允许调用,但使用源“null”发送它,将接受或拒绝它的决定留给服务器。 IE 无论如何都会调用(从安全角度来看,限制毫无意义),但随后决定通过....使脚本崩溃来强制执行该策略?像往常一样,IE 的糟糕设计总是让我感到惊讶。
    猜你喜欢
    • 2018-06-15
    • 1970-01-01
    • 2014-03-02
    • 2019-04-03
    • 2016-10-02
    • 1970-01-01
    • 2016-06-22
    • 2015-11-25
    • 1970-01-01
    相关资源
    最近更新 更多