Подтвердить что ты не робот

IE 9 и IE 10 время от времени не могут вводить текст во входные текстовые поля

Существует веб-страница с iframe внутри. Иногда элементы ввода текстового поля внутри iframe блокируются/замораживаются. Пользователи не могут вводить в них текст. Но текстовое поле можно сфокусировать и не потушить. Нет кода для отключения элементов управления вводами, и это не всегда происходит. До сих пор это происходит только в IE 9 и IE 10. Firefox и Chrome в порядке.

Краткое описание того, как работает страница:

  • На родительской странице есть кнопка. Нажав на нее, вы iframe с нуля и показать его. Это делается с помощью Javascript.

  • Опять же, на iframe есть кнопка, чтобы закрыть ее. Нажимая его
    удалит iframe из родительской страницы DOM.

Пожалуйста, дайте мне знать, если вы хотите получить дополнительную информацию по мере необходимости. Спасибо заранее.

4b9b3361

Ответ 1

Эта ошибка очень раздражает, еще хуже было очень мало информации, которую мы могли найти в google.

Есть только одна ссылка от Microsoft, что о IE9, но проблема все еще существует в IE10/IE11 и намного проще в воспроизведении.

Я просто создал скрипт, чтобы описать эту проблему

http://jsfiddle.net/WilliamLeung/T3JP9/1/

Почему так сложно для M $исправлять эту проблему в течение многих лет?

должно быть три метода обхода

  • Reset фокус при каждом изменении DOM с iframe
  • или запланировать задачу "ничего не делать", требующую много времени, что может вызвать ответ IE на событие мыши волшебным образом, я не мог сказать вам, почему, возможно, M $может

    Примеры кодов, которые устанавливают трудоемкую задачу

    setInterval(function () {
        var loopCount = 10000;
        var x = 0;
        for (var i = 0; i < loopCount; i++) {
            x = (x + Math.random() * 1000) >>> 0;
        }
        return x;
    }, 1000);
    
  • или reset содержимое DOM перед удалением из документа

    someDivWithIframe.innerHTML = "";
    $(someDivWithIframe).remove();
    

    Я не уверен, что это помогает во всех случаях, вы должны попробовать

Ответ 2

Решение с jQuery работало на IE11 для меня, а не для других решений.

$(theIframeElement).empty().remove();

Другое решение, работающее над IE9/10, состояло в том, чтобы установить iframe src в пустую область перед удалением

iframe.src=""

Но это вызывает исключение "Access denied" в IE11, если вы используете более старую версию jQuery < 1.11.1

Некоторые ссылки: Для информации, jQuery также исправил эту проблему для этого плагина Dialog.js, который показывал содержимое в iframe: http://bugs.jqueryui.com/ticket/9122

Исправлена ​​ошибка с ошибкой jQuery для IE11 Ошибка доступа к доступу: http://bugs.jquery.com/ticket/14535

Ответ 3

Мне удалось исправить эту ошибку, установив фокус на главную страницу. То, что я сделал до сих пор: поместите текстовое поле ввода HTML, которое установлено на невидимом, на главной странице. Когда iframe закрывается, я возвращаю фокус обратно в это текстовое поле.

Для получения дополнительной информации об этой ошибке IE обратитесь к ссылкам ниже.

link1

link2

Ответ 4

Ни один из решений не работал у меня в IE 11.

Решил его, добавив этот код внутри iframe:

$("input").first().focus().blur();

Очевидно, что это не сработает, если у вас нет контроля над вашим iframe.

Ответ 5

Это работало для меня в IE11,

  • Причина вопроса (кроме того, что IE глуп):
    • Фокусный элемент ввода удаляется из дисплея внутри iframe (свойство отображения css)
  • Issue:
    • Элемент ввода текста не может быть нажат, вы все равно можете использовать его для отображения
  • Обход проблемы:
    • Нам нужно сфокусировать() известный видимый элемент до того, как выберем поле ввода вне дисплея, поэтому на линии перед отображением дисплея из поля ввода мы получим строку: document.body.focus();

Ответ 6

Я изначально написал плагин ниже, чтобы устранить утечки памяти в IE 8, но, следовательно, он также исправляет эту проблему.

https://github.com/steelheaddigital/jquery.purgeFrame

Ответ 7

Просто чтобы добавить к тому, что говорили другие, это на самом деле проблема, когда некоторый ввод в iframe имеет фокус, который затем закрывается, в результате чего все другие входы теряют фокус. И действительно, наличие script для установки фокуса на элемент решает проблему. Но для меня это не работало, потому что некоторые из моих входов были отключены. Поэтому решение, которое сработало для меня, ниже

$("input[type=text]:not([disabled])").first().focus();

Полный фрагмент, когда я использовал bootstrap modal, а модальный - iframe. Я устанавливаю фокус на редактируемое поле перед открытием модели и после закрытия:

var modalInstance = $uibModal.open({
    // modal properties
  });
modalInstance.closed.then(function () {
  $("input[type=text]:not([disabled])").first().focus();
});
modalInstance.opened.then(function () {
  $("input[type=text]:not([disabled])").first().focus();

});

Ответ 8

Я тоже страдал от этой проблемы. Как указал Уильям Леунг, IE имеет ошибку с удалением Iframe Object из DOM.

Попробуйте следующее:

$(someDivWithIframe).empty().remove();

Ответ 9

У меня была такая же проблема с IE11, angularjs и с использованием IFrame. Мой шаблон использует ng-switch для изменения режимов просмотра. Один из режимов просмотра содержит IFrame. Момент, когда я переключаюсь с режима просмотра, содержащего IFrame:

var iFrame = <HTMLIFrameElement>document.getElementById("myIFrame");
iFrame.focus();
this.mode = ViewModes.ModeWithoutIFrame;

Решил проблему для меня.

Ответ 10

Простое решение с Javascript, которое работает для меня, и я не видел побочных эффектов в других браузерах:

<script>
  var pswElement = document.getElementById("password");
  pswElement.addEventListener("focus", myFocusFunction, true);

  function myFocusFunction() {    
    document.getElementById("password").select();
  }
</script>

В любом случае, довольно грустно, что MS не может исправить эту проблему и в более высокой версии.

Ответ 11

Вот решение, которое сработало для меня, попробовав всех остальных на этой странице! Требуется jQuery, но я уверен, что он может быть переписан на родном JavaScript, если это необходимо.

Как и во многих других решениях, это должно быть добавлено в источник iframe, если у вас есть доступ к его изменению:

$("body").focusout( function () { window.focus(); });