我在评论中提出了一个建议,但后来想起该解决方案不一定是跨浏览器兼容的,就像我之前遇到过的那样,因此创建了我的插件。
可以这么说,$(window).blur()
并不focus
总是在所有浏览器上都按预期工作。我不记得我遇到的问题的确切列表,但我知道有些是这样的;单击另一个选项卡(我认为在 FF 中)不会触发模糊,单击另一个程序会触发模糊,尽管事实上我的主浏览器窗口仍然打开并且该选项卡具有焦点,它没有 Windows 焦点等。 .
我创建的以下插件可能会有所帮助,因为我已将其归档以在“大多数”浏览器和版本中工作(未在所有版本上进行测试),并且它的功能与我们期望的工作完全相同。如果确切的浏览器窗口的选项卡失去焦点到同一浏览器的另一个选项卡,它只会变得模糊。当然反之亦然,重点是。
缩小插件:
只需添加到要在 jquery 之后调用的 js 文件或放在代码顶部
(function(jQuery){jQuery.winFocus||(jQuery.extend({winFocus:function(b){function c(a){a=a||window.event;a.hidden=a.type in{focus:"visible",focusin:"visible",pageshow:"visible",blur:"hidden",focusout:"hidden",pagehide:"hidden"}?"focusout"===a.type:this[d];jQuery(window).data("visible",!a.hidden);jQuery.winFocus.methods.exeCB(a)}var d="hidden";d in document?document.addEventListener("visibilitychange",c):(d="mozHidden")in document?document.addEventListener("mozvisibilitychange",c):(d="webkitHidden")in document?
document.addEventListener("webkitvisibilitychange",c):(d="msHidden")in document?document.addEventListener("msvisibilitychange",c):"onfocusin"in document?document.onfocusin=document.onfocusout=c:window.onpageshow=window.onpagehide=window.onfocus=window.onblur=c;for(x in arguments)"object"==typeof arguments[x]?(arguments[x].blur&&(jQuery.winFocus.methods.blur=arguments[x].blur),arguments[x].focus&&(jQuery.winFocus.methods.focus=arguments[x].focus),arguments[x].blurFocus&&(jQuery.winFocus.methods.blurFocus=
arguments[x].focus)):"function"==typeof arguments[x]&&(void 0===jQuery.winFocus.methods.blurFocus?jQuery.winFocus.methods.blurFocus=arguments[x]:(jQuery.winFocus.methods.blur=jQuery.winFocus.methods.blurFocus,jQuery.winFocus.methods.blurFocus=void 0,jQuery.winFocus.methods.focus=arguments[x]))}}),jQuery.winFocus.methods={blurFocus:void 0,blur:void 0,focus:void 0,exeCB:function(b){jQuery.winFocus.methods.blurFocus?jQuery.winFocus.methods.blurFocus(b,!b.hidden):b.hidden?jQuery.winFocus.methods.blur&&
jQuery.winFocus.methods.blur(b):jQuery.winFocus.methods.focus&&jQuery.winFocus.methods.focus(b)}})})(jQuery);
另外:#line-o 引用的 SO Question 是我第一次受到启发编写这个插件的地方,我也在那里发布了这个插件答案。哈哈