为什么使用window.location.href进行页面跳转有时会失败?
问题1:跳转被拦截的原因
你遇到的拦截并非亚马逊站点的限制,是代码运行的W3C在线测试工具沙箱环境的安全策略导致的:
- 绝大多数在线代码测试平台都会把用户提交的代码放在添加了特殊限制的
<iframe>沙箱中运行,沙箱默认会禁用页面跳转、弹窗之外的大部分导航行为,避免用户提交的恶意代码跳转到钓鱼站点,滥用平台域名的公信力。 - 部分平台还会为页面配置**内容安全策略(CSP)**响应头,通过
navigate-to或者default-src规则限制页面仅能跳转到平台白名单内的域名,你跳转的亚马逊不在白名单范围内,就会直接被浏览器触发拦截规则,提示服务器拒绝访问。
alert能正常触发是因为这类平台一般不会拦截测试用的弹窗交互,所以你可以确认JS加载成功,但跳转行为刚好命中了安全限制规则。
问题2:其他站点可正常跳转的原因
这是跨站安全机制导致的,和HTTPS没有直接关联:
- 你自己的个人站点、或者其他没有配置跳转限制的站点,既没有给页面添加CSP跳转限制,也没有把代码放在禁用导航的沙箱iframe中运行,自然不会拦截普通的
window.location.href跳转操作。 - 补充说明:如果你的代码是放在其他站点的iframe中嵌入运行,只要对应iframe的
sandbox属性添加了allow-top-navigation权限、站点CSP没有限制跳转目标,也可以正常触发跳转。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

