我有一个跨两个子域运行的Web应用程序,所有调用都按预期工作。问题是当我创建跨子域XmlHTTPRequest时,在Mobile Safari中,无论请求是否成功,网络指示器(在状态栏中)都会永远旋转。如果我在本地子域上发出请求,则在呼叫返回时指示符停止。
我正在使用AngularJS来完成我的XHR工作。这段代码按我的预期工作:
$http( {method: "GET", url: "http://my.domain.com"} ).success (data) ->
console.log "success " + data
.error (data, status) ->
console.log status + " " + data
但如果我这样做:
$http( {method: "GET", url: "http://other.domain.com"} ).success (data) ->
然后网络指标永远旋转。它似乎在桌面Safari中正确完成(据我所知)。 Web Inspector中没有任何内容表明任何调用都处于挂起状态 - 我可以看到返回的数据,我的应用程序收到所有回调。在Chrome(iOS和桌面版)中,网络指示灯会按预期停止旋转。
修改
我向Apple提交了一个错误。他们因“信息不足”而关闭它,但从未要求提供更多信息。我可以使用iOS 7或6.1进行复制,但在iOS 6.0中,网络微调器按预期停止。这强烈暗示这是一个苹果虫。
我在没有Angular的情况下重新编写:
<script type="text/javascript">
xhr = new window.XMLHttpRequest();
xhr.onreadystatechange = function() {
console.log("ready state changed to " + xhr.readyState);
if (xhr.readyState == 4) {
console.log("HTTP status " + xhr.status);
}
};
xhr.open("get", "//my.domain.com", true);
xhr.send();
</script>
同样,如果请求改为//other.domain.com
,其中“other”是与托管脚本/ HTML不同的子域,则网络微调器将永远运行。