IE 9 e IE 10 no pueden introducir texto en los cuadros de texto de entrada de vez en cuando


Hay una página web con un iframe dentro. A veces, los controles del cuadro de texto de entrada, dentro del iframe, están bloqueados/ congelados. Los usuarios no pueden introducir texto en ellos. Pero el cuadro de texto puede ser enfocado y no desvanecido. No hay código para desactivar los controles de entrada y esto no siempre sucede. Hasta ahora, esto está sucediendo solo en IE 9 e IE 10. Firefox y Chrome está bien.

Breve descripción de cómo funciona la página es:

  • Hay un botón en la página principal. Haciendo clic se construirá un iframe desde cero y mostrarlo. Esto se hace mediante Javascript.

  • Una vez más, hay un botón en el iframe para cerrarlo. Haciendo clic en él
    eliminará el iframe del DOM de la página principal.

Por favor, hágamelo saber si desea más información según sea necesario. Gracias de antemano.

Author: Pyae Phyo Aung, 2013-10-03

11 answers

Este error es muy molesto, peor aún, había muy pocas informaciones que pudimos encontrar en Google.

Solo hay un enlace de Microsoft que sobre IE9, pero el problema todavía existe en IE10 / IE11 y mucho más fácil de reproducir.

Acabo de crear un violín para describir este problema

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

¿Por qué es tan difícil para M fix solucionar este problema durante años?

Debe haber tres soluciones alternativas

  1. Restablecer el foco cada vez que modificamos el DOM con iframe
  2. O programar una" no hacer nada " tarea que consume tiempo, que puede hacer IE respuesta al evento del ratón mágicamente, No podría decirle por qué, tal vez M could podría

    Los códigos de ejemplo que configuran una tarea que consume mucho tiempo

    setInterval(function () {
        var loopCount = 10000;
        var x = 0;
        for (var i = 0; i < loopCount; i++) {
            x = (x + Math.random() * 1000) >>> 0;
        }
        return x;
    }, 1000);
    
  3. O restablecer el contenido DOM antes de eliminarlo del documento

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

    No estoy seguro de si ayuda para todos los casos, usted debe tener un intentado

 32
Author: William Leung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-27 18:24:52

He logrado corregir este error al volver a poner el foco en la página principal. Lo que he hecho hasta ahora es: coloque un cuadro de texto de entrada HTML, que se establece invisible, en la página principal. Cuando el iframe se cierra, vuelvo a poner el foco en ese cuadro de texto.

Consulte los siguientes enlaces para obtener más información sobre este error de IE.

Link1

Link2

 4
Author: Pyae Phyo Aung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-13 01:56:29

La solución con jQuery funcionó en IE11 para mí, no para las otras soluciones.

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

Otra solución que funciona en IE9 / 10 era establecer el iframe src en vacío antes de eliminarlo

iframe.src=""

Pero esto causa una excepción "Acceso denegado" en IE11 si está utilizando una versión anterior de jQuery

Algunos enlaces: Para obtener información, jQuery también solucionó este problema para su Diálogo.complemento js que mostraba contenido en un iframe: http://bugs.jqueryui.com/ticket/9122

Corrección de error de jQuery para IE11" acceso denegado " error: http://bugs.jquery.com/ticket/14535

 4
Author: JcAspes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-04 10:03:54

Ninguna de las soluciones funcionó para mí en IE 11.

Solucionado añadiendo este código dentro de iframe:

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

Obviamente, esto no funcionará si no tienes control sobre tu iframe.

 3
Author: Fyodor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-26 22:42:31

Esto funcionó para mí en IE11,

  • Causa del problema (aparte de IE ser estúpido):
    • El elemento de entrada enfocado se elimina de la pantalla dentro de un iframe (propiedad de pantalla CSS)
  • Cuestión:
    • No se puede hacer clic en el elemento de entrada de texto, aún puede tabular sin embargo
  • Solución:
    • Necesitamos enfocar () un elemento visible conocido antes de sacar un campo de entrada de la pantalla, así que en la línea antes de quitar la pantalla de un campo de entrada tenemos la línea: document.body.focus();
 2
Author: GM-Script-Writer-62850,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-20 11:36:17

Originalmente escribí el plugin a continuación para abordar las fugas de memoria en IE 8, pero en consecuencia también corrige este problema.

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

 1
Author: portlandrock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-27 18:48:00

Solución simple con Javascript que funciona para mí y no vi efectos secundarios en otros navegadores:

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

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

De todos modos es bastante triste MS no es capaz de solucionar este problema en la versión superior también.

 1
Author: squirrelInTheBarel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-17 09:28:10

Solo para agregar a lo que otros dijeron, en realidad es un problema cuando alguna entrada en un iframe está teniendo foco que luego se cierra causando que todas las demás entradas pierdan el foco. Y, de hecho, tener un script para establecer el foco en un elemento resuelve el problema. Pero para mí esto no funcionaba porque algunas de mis entradas estaban deshabilitadas. Así que la solución que funcionó para mí está por debajo de

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

Completar el fragmento ya que estaba usando el modal de bootstrap y el modal tenía un iframe. Puse el foco en un campo editable antes de abrir un modelo y después de cerrarlo:

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();

});
 1
Author: Narain Mittal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-27 20:37:11

Yo también sufría de este problema. Como William Leung ha señalado, IE tiene un error con el objeto remove Iframe del DOM.

Intente lo siguiente:

$(someDivWithIframe).empty().remove();
 0
Author: Teddy Han,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-18 04:00:00

Tuve el mismo problema con IE11, angularjs y usando un IFrame. Mi plantilla usa ng-switch para cambiar los modos de vista. Uno de los modos de vista contiene un IFrame. En el momento en que me aleje del modo de vista que contiene el IFrame:

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

Resuelto el problema para mí.

 0
Author: Frode,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-11 14:04:21

Aquí está la solución que funcionó para mí, después de haber probado todos los demás en esta página! Requiere jQuery, pero estoy seguro de que podría reescribirse en JavaScript nativo si es necesario.

Al igual que con muchas de las otras soluciones, esto debe agregarse a la fuente del iframe, suponiendo que tenga acceso para modificarlo:

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

 0
Author: Waggers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-21 15:57:08