Как отключить body.blur() в IE8?

Я работаю над корпоративным веб-приложением, которое работает в IE8. Кажется blur() вызывается на теле, вызывая отправку окна IE на задний план. К сожалению, этот код находится в той части приложения, которая контролируется поставщиком.

Есть ли возможный способ предотвратить blur() от вызова на теле без изменения кода, который на самом деле вызывает body.blur()?

Поскольку это корпоративное приложение, решения вне изменений самого приложения являются приемлемыми; Такие как изменения настроек IE8, реестра и т. Д.

5 ответов

Решение

Вы должны быть в состоянии жесткий код blur к фиктивному методу. Если вы можете войти до его вызова, просто позвоните body.blur = function() {}; (при условии, body указывает на ваш элемент тела DOM).

Используя jQuery, вы можете просто заблокировать событие:

$('body').blur(function(e) { e.preventDefault(); });

Если использование Firefox является вариантом, у меня есть два ответа, где я предлагаю заменить функцию с помощью Greasemonkey.

  1. Использование JavaScript для создания горячей клавиши Keylistener для страницы Facebook "Мне нравится"
  2. Скрипт Greasemonkey для замены функции плагина jQuery?

Если вам нужно использовать IE, вам может потребоваться изменить саму страницу.
(Я знаю, что есть трикси и IE7pro для IE, но никогда не использовал).

document.body.blur=function(){document.body.focus()}

У меня была проблема при использовании редактора javaScript: CLEditor, если я использую метод jQuery blur(), окно IE переходит в фоновый режим. У CLEditor есть свой iframe, который имеет свое тело. Когда вы извлекаете это тело и используете body.blur(), браузер IE переходит в фоновый режим.

Другие браузеры не показывают такое поведение, поэтому лучше использовать FF или Chrome, если вы испытываете это.

Если вы удалите body.blur(), возможно, у вас будет меньше проблем с IE, чем сейчас, но все же вы можете столкнуться с некоторыми незначительными ошибками (что-то не теряет фокус в определенный момент), но я полагаю, вы могли бы с этим справиться. Однако, если событие blur () обогащено некоторой логикой, это может быть проблемой - тогда найдите его определение и переместите логику в другое событие, которое запускается с помощью браузера (onload или ready).

Другие вопросы по тегам