2016-05-16 40 views
16

Abbiamo un'applicazione che per lo più si occupa di iframe (carichi le diverse pagine all'interno dell'applicazione su richiesta)Iframe non viene caricata in Internet Explorer dopo aver installato l'aggiornamento KB3154070

Recentemente, il browser IE GOT aggiornati con KB3154070 (corrente IE Versione: 11.0.9600.18314) come parte degli aggiornamenti di sistema. Dopo quell'aggiornamento, la maggior parte delle funzionalità si sta rompendo completamente. Ha effettuato tutte le pagine che utilizzano iframe. Il contenuto non si sta caricando e risulta in una pagina vuota. La richiesta sembra essere interrotta quando ispezionata nel pannello di rete come mostrato nella schermata di acquisizione sottostante. Network Traffic Capture

abbiamo svolto le seguenti risoluzione dei problemi

Abbiamo fatto in modo che tutti i tag iframe sono vicini in modo corretto. L'src dell'iframe non è vuoto. Se accediamo alla stessa pagina all'esterno (senza caricare in iframe), funziona correttamente. Ma il problema è solo all'interno di iframe. Come soluzione rapida a questo problema, abbiamo chiesto ai nostri utenti di ripristinare l'aggiornamento. Ma questa non è la soluzione prevista.

Il vostro aiuto è molto apprezzato.

Cordiali saluti, Swajay.

+2

add: per intestazione, si forzerà alla modalità IE 10. provare anche a cancellare i file temporanei di Internet, i cookie e la cronologia – Zaki

+0

Dalla mia sperimentazione, sembra essere un problema nella gestione di iframe quando IE è in modalità di compatibilità. MS ha cambiato qualcosa nel modo in cui viene caricato iframe. Come suggerito da Matt, potrebbe essere un problema di spostamento DOM. In precedenza, IE non distruggerebbe ricreare un iframe se spostato in modalità compat (lo fa in modalità standard/edge). Se questo è il caso in compat, questo può rompere un sacco di applicazioni legacy. Ho osservato che le modifiche alle impostazioni di zona a volte possono rendere le cose ancora funzionanti, ma non è affidabile. Mi permetto che MS abbia introdotto una condizione di gara nel supporto compatibile con iframe. – ewh

+0

Questo non è limitato all'aggiornamento nel titolo. A partire dal 15 giugno 2016, l'ultimo aggiornamento presenta anche questo problema. – ekawas

risposta

4

Abbiamo avuto esattamente lo stesso problema. Il problema nel nostro caso specifico era che gli iframe ora abortiscono le loro richieste quando sono riorientati (cioè spostati da una posizione dell'albero DOM a un'altra). Siamo stati in grado di aggirare la nuova restrizione evitando di spostare l'iframe durante il caricamento. Non posso essere certo che sia esattamente quello che sta succedendo nel tuo caso, ma scommetto che si è verificata un'interazione tra l'inizio del caricamento dell'iframe e il suo completamento.

+0

Penso che tu stia facendo qualcosa. Durante i miei test, ho scoperto che se l'iframe tenta di invocare qualsiasi script (ad esempio tentando di caricare dojo.js con un tag script), IE lo "bloccherà", causando l'assenza del corpo dell'iframe. Attualmente sto riscontrando un certo successo stubing l'iframe senza valore di attributo src. Quindi nel gestore onload del documento principale, utilizzo javascript per impostare iframe src. Questo sembra funzionare. – ewh

9

@ La risposta di Matt fornisce un indizio su come risolvere il problema. Sembra che IE, con KB3154070 installato, blocchi il contenuto iframe se l'iframe avvia qualsiasi operazione di script prima che l'albero DOM padre sia pronto. Ho notato che non si verifica alcun blocco se la risorsa caricata da iframe non contiene script. Ho anche notato che a volte IE non blocca il contenuto con lo scripting, ma ciò è probabilmente dovuto a una condizione di competizione tra il DOM padre pronto e il caricamento delle risorse iframe.

Un'altra osservazione è che non ho visto alcun problema di caricamento di iframe durante l'esecuzione di IE in modalità edge. Sembra che il problema si verifica solo quando si esegue in modalità compatibilità.

Per risolvere il problema per il progetto su cui lavoro, ho annullato l'iframe, in cui non dichiavo alcun valore per l'attributo src. Nel gestore onload della pagina principale - che indica che l'albero DOM è pronto - utilizzo javascript per impostare l'attributo src dell'iframe. Questo sembra funzionare, dove l'iframe viene caricato correttamente.

Per esempio, supponiamo di avere la seguente:

<iframe id="myIFrame"></iframe> 

nel gestore onload, avete qualcosa di simile:

document.getElementById('myIFrame').src = '/whatever/url/to/load'; 

Continuo a pensare KB3154070 ha introdotto un bug di regressione (se non bug) , ma forse ciò che ho suggerito può essere applicato alla tua applicazione.

UPDATE

IE aggiornamento KB317016 sembra risolvere il problema iframe carico. Microsoft ha riconosciuto ufficialmente il bug: KB3176757.

Ho intenzione di mantenere i miei cambiamenti sul posto poiché alcuni dei nostri clienti potrebbero non essere in grado di aggiornare IE immediatamente. Inoltre, le modifiche apportate funzionano ancora in tutte le versioni di IE che dobbiamo supportare.

+0

Fino a quel momento, il tuo suggerimento era l'unica cosa che funzionasse davvero. –

+0

grazie .. questo ha risolto il mio problema. – user1673567

2

Il problema è stato risolto nel mio caso impostando l'intestazione di compatibilità su Bordo. Con KB3154070, non funziona con le modalità documento 7 e 8, ma funziona con 9, 10 e Edge.

Inoltre, il suggerimento @ewh di impostare src dopo il caricamento del documento ha funzionato correttamente. Grazie.

3

Il software legacy della mia azienda è stato enormemente influenzato da questo problema. Siamo venuti con la seguente soluzione generica fino a quando Microsoft risolve questo bug:

$(document).ready(function() { 
    loadIframesIE(); 
}); 

function loadIframesIE() { 
    var $iframe; 
    $('iframe').each(function(cnt, iframe) { 
     $iframe = $(iframe); 

     // If the iframe body has no child, it couldn't be loaded 
     if ($iframe.contents().find('body').children().length === 0 && !$iframe.attr('resetted')) { 

      // Necessary to avoid an infinite loop in some cases 
      $iframe.attr('resetted', true); 
      $iframe.attr('src', $iframe.attr('src')); 

     } 
    }); 
}