IE9因jQuery Mobile失去焦点的窗口

12
在我们的产品中,我们在ASP.NET网站中使用了最新版本的jQuery Mobile。每次进行ASP.NET postback(页面回传)时,浏览器窗口会到屏幕的后面。
例如:
- 最大化任何窗口,例如Visual Studio、Word、Windows Explorer。 - 在其上方最大化IE9。IE9是您在屏幕上看到的唯一内容。 - 单击我们解决方案中执行postback的按钮。 - IE9不再可见。它后面的东西现在获得了焦点(并填充了屏幕,因为它是最大化的)。
我知道的解决方法只有:
- 不包括jQuery mobile scripts。 - 确保IE9是Windows中唯一最大化的窗口。
我不知道jQuery Mobile正在后台做什么,并且认为这是IE9中的一个错误,最终会被修复。但是,如果您有任何提示可以在此期间防止发生这种情况,那将是很好的。
编辑:似乎不是在每个postback上都有此问题。它仅出现在执行Response.Redirect的postback上。我应该添加所有my postback都实际使用了ASP.NET AJAX,而不是完整的postbacks。

5
我很惊讶 JavaScript 能以这种方式影响操作系统窗口。 - Jason Kealey
你的应用程序是否附加在VS中以调试模式运行? - Daniel A. White
不行。即使在外部服务器上执行也是如此。 - Jason Kealey
3
只有在IE9中只有一个标签页打开时,我才能重现这个问题。如果你打开另一个标签页并访问任意网站,这个bug就不会出现了。 - bobslaede
4个回答

16

我知道这已经是一篇老帖子了,但是对于从Google过来的人来说:

今天我遇到了同样的问题。看起来当你在窗口对象上触发失去焦点事件(blur event)时,这种失去焦点的行为就会发生在IE中。以下是导致我出现这个问题的代码:

$(document.activeElement).blur();

当没有其他元素处于焦点状态时,activeElement会默认为元素,并且模糊事件会冒泡到窗口。为了解决这个问题,我只需进行如下检查:

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

这很有道理,但我没有时间仔细测试它,因为我们找到了另一个解决方法(Chrome框架,呵呵):) - Jason Kealey

10

我曾遇到过IE10和jQuery 1.7.2的类似问题。

我在我的代码中找到了这些行:

$(document.activeElement).blur();

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

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

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

写得很好的答案和优雅的解决方案,对我有用,非常感谢! - 4imble

0

使用jQuery Mobile 1.4.2出现了同样的问题。

当在IE 10中使用单个标签页,在同一监视器上打开另一个窗口,如果打开弹出层,它会将浏览器发送到后台。

为了解决这个问题,您需要编辑_handleDocumentFocusIn函数。您需要更改读取以下内容的行(10391):

target.blur();

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

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


0

我只是想把这个链接发布给那些正在经历更多这种持续混乱的人。我在IE 9和IE 10上看到了问题,这是从Angular位置资源内部的window.location = 'BLAH'引起的。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接