跨域 ajax 不适用于移动 Safari 中的重定向

Posted

技术标签:

【中文标题】跨域 ajax 不适用于移动 Safari 中的重定向【英文标题】:Cross domain ajax does not work with redirect in mobile safari 【发布时间】:2012-07-27 07:10:45 【问题描述】:

我遇到了这个 WebKit 错误中提到的问题: https://bugs.webkit.org/show_bug.cgi?id=57600

问题在于移动 Safari,它适用于 Google Chrome 和 Firefox。我重定向跨域 ajax 请求的相同代码适用于 Google Chrome 和 Firefox,但不适用于移动 Safari。

据我了解,该错误是在 WebKit 版本 525 中提交的: https://bugs.webkit.org/show_bug.cgi?id=57600

并在 WebKit 版本 528 中解决(我认为这是因为在同一问题上打开了不同的回归错误): https://lists.webkit.org/pipermail/webkit-unassigned/2012-April/429252.html

但在 iPhone 设备上使用我的移动 Safari 时,重定向被拒绝,即使我有带有 WebKit 版本 534(更高版本)的移动 Safari。

有没有人遇到过这种行为,有解决办法吗?

注意:我确实定义了跨域 (CORS) 标头(因为它在 Google Chrome 和 Firefox 中工作)。

编辑:Windows 版 Safari 也存在同样的问题。

【问题讨论】:

【参考方案1】:

我在多个移动浏览器上遇到了同样的问题(SafariChrome/Dolphin android)。

302 没有解决方案,但我找到了解决方法:

我们使用的 Java 框架可以重定向或转发 POST 响应,因此我们将其更改为 forwards 模式。

使用转发会产生200,因此AJAX 成功处理程序(我们使用jQuery)可以正确检索数据。

希望这会有所帮助。

【讨论】:

谢谢,在JSP中,我也可以转发请求,比如:getServletConfig().getServletContext().getRequestDispatcher("/JSP/Demo.hello.jsp").forward(request,response) ;但我仍然想重定向而不是将请求转发到 JSP 页面。

以上是关于跨域 ajax 不适用于移动 Safari 中的重定向的主要内容,如果未能解决你的问题,请参考以下文章

跨域 Ajax 请求在 Opera 和 IE9 中不起作用?

Safari/iPhone 和 Opera/Android 中的 JSONP 不起作用

HTML Canvas 线条透明度不适用于移动 Safari

调整输入类型搜索的边框半径不适用于移动 safari

触摸事件是不是不适用于 iPad Safari 中的文本输入元素?

我的回调不适用于跨域的 json 数据