由于jQuery Mobile,IE9窗口失去了焦点

时间:2011-04-14 00:46:44

标签: javascript asp.net jquery-mobile internet-explorer-9

在我们的产品中,我们在ASP.NET网站上使用了最新的jQuery Mobile开发版本。每次我们进行ASP.NET回发时,浏览器窗口都会显示在屏幕的后面。

示例:

  • 最大化任何窗口。示例:Visual Studio,Word,Windows资源管理器。
  • 最大化IE9。 IE9是唯一的 你在屏幕上看到的东西。
  • 点击我们解决方案中的按钮 回发。
  • IE9不再可见。 无论背后的是什么,现在都有焦点 (并填充屏幕,因为它是 最大化)

我知道只有解决方法:

  • 不要包含jQuery移动脚本。
  • 确保IE9是Windows中唯一的最大化窗口。

我不知道jQuery Mobile在后台做了什么,我假设这是IE9中最终会修复的错误。但是,如果您在此期间有任何关于如何防止它发生的提示,那就太棒了。

编辑:似乎并非每次回发都有。它在每个回发上执行Response.Redirect。我应该补充一点,我所有的回发实际上都是使用ASP.NET AJAX,而不是完整的回发。

4 个答案:

答案 0 :(得分:16)

我知道这是一篇旧帖子,但对于来自谷歌的人来说:

我今天遇到了同样的问题。看起来失去焦点行为是IE在窗口对象上触发blur事件时所做的事情。这是导致我这个问题的代码:

$(document.activeElement).blur();
当没有其他元素处于焦点时,

activeElement将默认为body元素,然后blur事件会冒泡到窗口。为了解决这个问题,我只做了一个检查:

if (document.activeElement != $('body')[0]) {
    $(document.activeElement).blur();
}

答案 1 :(得分:10)

我遇到了与IE10和jQuery 1.7.2类似的问题。 我在代码中找到了这些行:

$(document.activeElement).blur();

$(':focus').blur();

因此,添加简单的.not('body')可以解决问题:

$(document.activeElement).not('body').blur();
$(':focus').not('body').blur();

答案 2 :(得分:0)

jQuery Mobile 1.4.2似乎也出现了同样的问题。

使用IE 10时,如果打开一个标签页并在同一台显示器上打开另一个窗口,如果打开一个弹出窗口,它会将浏览器发送到后台。

要解决此问题,您必须编辑_handleDocumentFocusIn函数。您需要更改以下行(10391):

target.blur();

if (targetElement.nodeName.toLowerCase() !== "body")
{
    target.blur();
}

我提出了拉取请求,希望这将包含在下一个版本中。

答案 3 :(得分:0)

只需将此链接发布给任何正在经历更多这种持续混乱的人。我在Angular位置资源中的window.location =' BLAH'上看到IE 9和IE 10上的问题。

这似乎并没有为我解决问题,但它可能对其他人有所帮助:

http://support.microsoft.com/kb/2600156/en-us