IE11如何填充window.location.origin?

8
我在一个非生产环境的Internet Explorer 11中遇到了问题,其中window.location.originundefined。然而,在生产环境中,这个值实际上返回window.location.origin = http://www.myproductionwebsite.com。这个问题只存在于Internet Explorer浏览器中,在Chrome和Firefox浏览器中的生产和非生产环境下都正常工作,这让我相信这可能与IE11中的Chakra JavaScript引擎填充origin的方式有关。我还查看了在生产和非生产环境下请求和响应头,所有参数都是相同的。那么,Internet Explorer 11如何计算window.location.origin,与Chrome或Firefox不同呢?

在测试环境中,window.location.href的值是多少? - Barmar
嗯,这真的很奇怪,它并没有给我带来问题,因为我可以绕过它,只是好奇。 - UsainBloot
你在测试环境中是否在兼容模式下运行?旧版本的IE不支持“origin”。 - Barmar
window.location.origin 是在 IE11 中首次添加的。 - Barmar
2
你还在面对这个问题吗?这个 bug 可能与它有关吗?https://connect.microsoft.com/IE/feedback/details/1763802/location-origin-is-undefined-in-ie-11-on-windows-10-but-works-on-windows-7 - William
显示剩余4条评论
1个回答

7

Intranet网站会被设为兼容性视图,这将禁用window.location.origin

除非页面显式指定另一种文档模式,否则页面将在兼容性视图下运行。可通过工具 > 兼容性视图设置菜单取消此选项。

根据以下标准,网站将被放置在Intranet区域中:

直接映射。与其他区域一样,用户或网络管理员可以将一组URL模式映射到本地Intranet区域。此列表可通过单击工具 > Internet选项 > 安全 > 本地Intranet > 站点 > 高级查看。

PlainHostName规则(也称“点规则”)。如果URI的主机名不包含任何句点(例如http://team/),则它将被映射到本地Intranet区域。

固定代理绕过列表。如果用户在工具 > Internet选项 > 连接 > LAN设置中指定了一个固定代理,则列出以避开该代理的站点将被映射到本地Intranet区域。可以通过单击高级按钮找到固定代理绕过列表;它在屏幕底部的标有“例外情况”的框中。

(WPAD)代理脚本。如果用户的代理配置为“自动检测设置”或“使用自动配置脚本”,则浏览器将运行指定的WPAD代理配置脚本中的FindProxyForUrl函数,以确定每个请求应该使用哪个代理。如果脚本返回“DIRECT”,浏览器将绕过代理,该站点将被映射到本地Intranet区域。当将URL映射到区域时,URLMon将调用FindProxyForUrl函数来确定是否适用绕过规则。一个有趣的细节是,代理脚本本身可以调用dnsResolve获取站点的IP地址,并将其信息作为其决策的一部分。

Full-sized flowchart detailing how document modes are chosen in IE11

参考资料


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接