23

C'è una pagina Web con all'interno un iframe. A volte, i controlli della casella di testo Input, all'interno dell'iframe, sono bloccati/congelati. Gli utenti non possono inserire il testo in essi. Ma la casella di testo può essere focalizzata e non sbiadita. Non esiste un codice per disabilitare i controlli di input e questo non sempre accade. Fino ad ora, questo sta accadendo solo in IE 9 e IE 10. Firefox e Chrome è OK.IE 9 e IE 10 non possono immettere testo in caselle di testo di input di volta in volta

Breve descrizione di come funziona la pagina è:

  • C'è un pulsante sulla pagina padre. Facendo clic su di esso si costruisce un iframe da zero e lo mostra. Questo è fatto da Javascript.

  • Anche in questo caso, è presente un pulsante sull'iframe per chiuderlo. Cliccandolo su
    si rimuoverà l'iframe dal DOM della pagina madre.

Per favore fatemi sapere se volete ulteriori informazioni come richiesto. Grazie in anticipo.

+0

violino per favore !! – Arun

+0

c'è qualche z-index applicato in css per il contenitore dei campi? –

+0

sei riuscito a capire questo problema? ho qualcosa di simile – ajp

risposta

28

Questo bug è molto fastidioso, peggio ancora c'era molto poche informazioni che abbiamo trovato su google.

C'è solo un collegamento da Microsoft a quello di IE9, ma il problema esiste ancora in IE10/IE11 e molto più facile da riprodurre.

Ho appena creare un violino per descrivere questo problema

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

Perché è così difficile per M $ per risolvere questo problema per anni?

ci dovrebbe essere tre soluzioni

  1. Resetta la messa a fuoco ogni volta che modifichiamo il DOM con iframe
  2. o pianificare un'attività di "non fare nulla" in termini di tempo, che può rendere la risposta IE per evento del mouse magicamente , non saprei dire perché, forse M $ poteva

    I codici di esempio che impostare un compito che richiede tempo

    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 ripristinare il contenuto DOM prima di rimuoverla dal documento

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

    non sono sicuro se aiuta per tutti i casi, si dovrebbe avere un provato

+0

Questo mi ha fatto impazzire per quasi 2 giorni. I nostri tester e PM erano convinti che fosse una cattiva logica nel nostro codice. Abbiamo scoperto che usavamo un paio di editor CK che verranno rimossi o aggiunti a seconda delle altre impostazioni e se vieni focalizzato su uno di essi quando viene rimosso, viene mangiato. La mia correzione era di fare solo un .blur() e.focus() su un elemento noto – Mungoid

+0

"C'è un solo collegamento da Microsoft a quello di IE9" (in realtà forniscici il link!) –

+0

@JamiePate Ho aggiunto alcuni collegamenti a questo bug nella mia risposta. –

3

Sono riuscito a correggere questo errore impostando lo stato attivo sulla pagina principale. Quello che ho fatto finora è: mettere una casella di testo di input HTML, che è impostata invisibile, nella pagina principale. Quando l'iframe si chiude, ritorna a quella casella di testo.

Fare riferimento ai collegamenti seguenti per ulteriori informazioni su questo bug di IE.

link1

link2

0

Sono stato anche colpito da questo problema . Come ha sottolineato William Leung, IE ha un bug con rimuovere l'oggetto Iframe dal DOM.

provare quanto segue:

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

La soluzione con jQuery lavorato su IE11 per me, non le altre soluzioni.

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

Un altra soluzione a lavorare su IE9/10 è stato quello di impostare lo src iframe per svuotare prima di eliminarlo

iframe.src=""

Ma questa causa un'eccezione "Accesso negato" sul IE11 se stanno usando una vecchia versione jQuery < 1.11.1

Alcuni link: Per informazioni, jQuery ha risolto anche questo problema per il suo plug-in Dialog.js t cappello è stato la visualizzazione di contenuti in un iframe: http://bugs.jqueryui.com/ticket/9122

jQuery bug fix per IE11 "Accesso negato" errore: http://bugs.jquery.com/ticket/14535

+0

Oh scusa, ho sbagliato, il problema di messa a fuoco è appena tornato sul mio IE11 !!! voglio piangere ! quindi nessuna soluzione per il momento per IE11 – JcAspes

+0

Stavo facendo un window.focus() dopo aver rimosso l'iframe. rimuovendo la finestra window.focus() per far sparire l'errore su IE11, ma un po 'di tempo (a caso) THE BUG torna su IE11 – JcAspes

3

Nessuna delle soluzioni lavorato per me in IE 11.

risolto aggiungendo questo codice all'interno di iframe:

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

Ovviamente, questo non funzionerà se non hai il controllo sul tuo iframe.

+0

Questo ha funzionato bene per me, grazie! --- votato !!! –

0

Ho avuto lo stesso problema con IE11, angularjs e utilizzando un IFrame. Il mio modello utilizza ng-switch per modificare le modalità di visualizzazione. Una delle modalità di visualizzazione contiene un IFrame. Nel momento in cui passare dalla visualizzazione in modalità contenente l'IFrame:

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

risolto il problema per me.

0

soluzione semplice con JavaScript che lavora per me e ho visto nessun effetto collaterale in altri browser:

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

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

'comunque abbastanza triste MS non è in grado di difficoltà tale problema nella versione più alta anche.

1

Giusto per aggiungere a ciò che altri hanno detto, in realtà è un problema quando alcuni input in un iframe stanno avendo il focus che viene poi chiuso facendo perdere tutti gli altri input. E infatti avere uno script per focalizzare l'attenzione su un elemento risolve il problema. Ma per me questo non funzionava perché alcuni dei miei input erano disabilitati. Quindi la soluzione che ha funzionato per me è al di sotto

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

frammento Completa come stavo usando modali bootstrap e il modal aveva un iframe. Ho impostato la messa a fuoco su un campo modificabile prima di aprire un modello di e dopo la chiusura:

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

}); 
2

Questo ha funzionato per me su IE11,

  • Causa del problema (a parte IE essere stupido):
    • elemento input focalizzata viene rimosso dalla visualizzazione all'interno di una (proprietà di visualizzazione css) iframe
  • Edizione 012.
    • elemento di input di testo non può essere cliccato, si può ancora scheda ad esso comunque
  • Soluzione:
    • Dobbiamo concentrarci() un elemento visibile noto prima di prendere un campo di input di visualizzazione, così sulla linea prima di prendere lo schermo di distanza da un campo di input che abbiamo la linea: document.body.focus();
0

Ecco la solu che ha funzionato per me, dopo aver provato tutti gli altri su questa pagina! Richiede jQuery ma sono sicuro che potrebbe essere riscritto in JavaScript nativo, se necessario.

Come per molte delle altre soluzioni, questo dovrebbe essere aggiunto alla fonte del iframe, a patto di avere accesso a modificarlo:

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

Problemi correlati