【发布时间】:2012-01-04 21:21:53
【问题描述】:
我们有一个网站,我们使用 iframe 加载一些数据(iframe 长轮询)。该数据可以自动加载,例如每 2 分钟。当这个网站在 IE 中打开时(在最新的 9 版本中尝试过),它将每 2 分钟发送一次请求。没关系。
但是当我们打开另一个浏览器(或程序)并且 IE 不在焦点上时 - 在每次请求期间,IE 都会自己获取焦点...
也许有人知道如何解决这个问题(防止 IE 窃取焦点)? 据我了解,Ajax 请求可以解决此问题,但这可能很难更新...
更新:
从服务器(在 Iframe 中)我们返回如下内容:
<html><body>
<script>parent.MailChecker.updateStatus({"s":"Connecting to xxx@gmail.com...","p":0,"c":null,"e":false})</script>
<script>parent.MailChecker.updateStatus({"s":"Preparing to fetch emails...","p":0,"c":null,"e":false})</script>
<script>parent.MailChecker.updateStatus({"s":"Downloading 1 email from 35...","p":2.8571428571429,"c":null,"e":"784"})</script>
<script>parent.MailChecker.updateStatus({"s":"Downloading 2 emails from 35...","p":5.7142857142857,"c":null,"e":"784"})</script>
...
<script>parent.MailChecker.updateStatus({"s":"Done!","p":100,"c":"0","e":false})</script>
</body></html>
【问题讨论】:
-
IFRAME(永久帧或长轮询)是解决此问题的旧方法。最常见的解决方案是给我们
XMLHttpRequest对象来实现您想要做的事情。如果您采用这种方法,您将不会看到同样的焦点问题。 -
在我的情况下,我将 js(将被自动调用)返回到框架中,所以我认为我不能使用 Ajax 来做类似的事情......
-
Forever 框架确实按照您描述的方式工作(它们执行脚本,通常是从 IFRAME 对页面的一次调用),因此您需要重新编写代码,以便仅发送连接的数据.也许指示应该执行什么功能的指令?
-
我们使用 iframe 来检查电子邮件列表,在这个请求中,我们通过 js 代码(自动更新进度条)返回电子邮件检查的当前状态(百分比、总数等)。
-
太棒了!您可以从 XHR 请求中返回类似于以下 JSON 的内容:
{ "percent" :55, "totalCount": 355, "otherValue": "I'm another value" }作为字符串并使用 JSON.parse 将其解析为 JavaScript 对象(在大多数/所有现代浏览器中原生可用)。然后像现在一样进行 UI 更新。这听起来不像是一项大工作,它会解决你的注意力问题。
标签: javascript internet-explorer iframe comet