IE11:Web 请求在沙盒 iframe 中不起作用
IE11: web requests not working from sandboxed iframe
我正在尝试在 javascript 中向 iframe
中的休息 API 发出 HTTP GET
请求。
iframe 是沙盒的,但它设置了 allow-scripts
属性,并且我正在调用的 API 已启用以允许所有来源,因此 CORS 应该不是问题。
我在这里用最少的代码示例重新创建了场景:
http://plnkr.co/edit/jrchvxFXQQDqs2Fv
如果您转到该页面并使用任何现代浏览器(Chrome、Edge 等)预览该页面,它都可以正常工作。
但是如果您使用 Internet Explorer 11
这样做,调用将失败。在 javascript 控制台上,我们收到此一般网络错误:
但奇怪的是:调用实际上 运行 是正确的。事实上,如果我们检查网络选项卡,我们可以看到它正在执行并返回 200:
我是不是做错了什么,或者这只是普通的 IE 就是 IE?
我发现我们需要添加 allow-same-origin
才能使其在 IE 中工作。
默认情况下 sandbox
对 iframe 强制执行“不同来源”策略。换句话说,它使浏览器将 iframe 视为来自另一个来源,即使其 src 指向同一站点。 allow-same-origin
删除此功能。所以我认为它首先在 IE 中失败,因为它不符合 same-origin policy.
至于IE和其他浏览器的区别,我想是因为不同浏览器的策略设计不同。
我也找到了a thread这个问题,里面有一些有用的信息,你也可以参考一下。
我正在尝试在 javascript 中向 iframe
中的休息 API 发出 HTTP GET
请求。
iframe 是沙盒的,但它设置了 allow-scripts
属性,并且我正在调用的 API 已启用以允许所有来源,因此 CORS 应该不是问题。
我在这里用最少的代码示例重新创建了场景:
http://plnkr.co/edit/jrchvxFXQQDqs2Fv
如果您转到该页面并使用任何现代浏览器(Chrome、Edge 等)预览该页面,它都可以正常工作。
但是如果您使用 Internet Explorer 11
这样做,调用将失败。在 javascript 控制台上,我们收到此一般网络错误:
但奇怪的是:调用实际上 运行 是正确的。事实上,如果我们检查网络选项卡,我们可以看到它正在执行并返回 200:
我是不是做错了什么,或者这只是普通的 IE 就是 IE?
我发现我们需要添加 allow-same-origin
才能使其在 IE 中工作。
默认情况下 sandbox
对 iframe 强制执行“不同来源”策略。换句话说,它使浏览器将 iframe 视为来自另一个来源,即使其 src 指向同一站点。 allow-same-origin
删除此功能。所以我认为它首先在 IE 中失败,因为它不符合 same-origin policy.
至于IE和其他浏览器的区别,我想是因为不同浏览器的策略设计不同。
我也找到了a thread这个问题,里面有一些有用的信息,你也可以参考一下。