我正在编写一段代码来触发多个图像调用(像素),有时这些调用可能会根据服务器的可用性而隐藏。我设计了一个调用,如果所有调用都没有在 5 秒内完成,页面会通过 location.replace 重定向到一个空的 HTML 页面。
整个东西都包裹在一个 iFrame 中,当我在 Firebug 中对其进行测试时,它似乎运行良好。当我在 Fiddler 中查看呼叫时,时间显示为服务器回复所需的全部时间(即使浏览器不再等待呼叫)。
浏览器中到底发生了什么?是否可以自由地继续做其他需要做的事情?即使 iframe 已通过 location.replace 更改,它是否真的仍在等待呼叫返回?
假设这是 iFrame 中的代码,并且 iFrame 放置在另一个页面上。
<html>
<body>
<img src="http://localhost:8080/MyServer/MyFirstCall" width="1" height="1"/>
<img src="http://localhost:8080/MyServer/MySecondCall" width="1" height="1"/>
<script>
window.setTimeout("if(true) {location.replace('http://somewhere/empty.html');}", 5000);
</script>
</body>
</html>
Firebug 会告诉我一切正常,并且 empty.html 已加载(当然我正在调试并强制调用在 5 秒后返回)。
另一方面,Fiddler 会告诉我 FirstCall 或 SecondCall 的总经过时间是 30 秒(或者每当我决定让调试器离开时)。
浏览器真的在等待吗?它不是在等待吗?Fiddler 是否太聪明了,即使呼叫不再有效也会跟踪呼叫?其他内容会继续运行,还是浏览器会因为技术上没有返回调用而阻止其他内容?