6

Ok, questo è di gran lunga il bug più strano che abbia mai incontrato. È piuttosto semplice però. Se carico jQuery e poi jQuery mobile in modo dinamico in qualsiasi versione di Internet Explorer, la finestra IE effettiva minimizza. Ciò accade in tutte le versioni di IE tramite IETester, tuttavia, se eseguo la versione completa in IE9, attiva la modalità di compatibilità e, per qualche motivo, non minimizza.Il caricamento dinamico di jQuery mobile fa sì che IE minimizzi

Ho provato vari modi di caricare gli script (commentati nel codice di esempio), il tutto con lo stesso comportamento.

Perché sta succedendo? C'è un modo per aggirarlo?

http://jsfiddle.net/Xeon06/RCsuH/

+0

Posso confermare che vedo succedere in IE 7 su una semplice VM. Nello specifico, la finestra non è * minimizzata * - viene mandata in fondo allo stack (minimizza altre finestre e troverai la tua finestra di IE ancora aperta), che sembra un 'window.blur()' chiamato da qualche parte. (Sul mio IE 9, non minimizza/sfoca né entra in modalità di compatibilità.) – josh3736

risposta

3

Questo è un known issue in jQuery mobile. La riga incriminata è jquery.mobile.navigation.js:913.

// Kill the keyboard. 
// XXX_jblas: We need to stop crawling the entire document to kill focus. Instead, 
//   we should be tracking focus with a live() handler so we already have 
//   the element in hand at this point. 
// Wrap this in a try/catch block since IE9 throw "Unspecified error" if document.activeElement 
// is undefined when we are in an IFrame. 
try { 
    $(document.activeElement || "").add("input:focus, textarea:focus, select:focus").blur(); 
} catch(e) {} 

C'è la chiamata a blur() che è l'invio di finestre di IE alla parte posteriore della pila.

Come soluzione temporanea, è possibile evitare ciò ponendo i tag di script fisicamente nello <head> dell'HTML.

<!DOCTYPE HTML> 
<html> 
    <head> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/latest/jquery.mobile.css" /> 
    <script src="http://code.jquery.com/jquery-1.6.2.js"></script> 
    <script src="http://code.jquery.com/mobile/latest/jquery.mobile.js"></script> 

... 

Posizionare i tag di script in un altro punto del documento o inserirli tramite script attiva il bug.

This Fiddle illustra la soluzione alternativa. Si noti che questo funziona solo in un documento di livello superiore . Se il documento è in un , il bug verrà comunque visualizzato. Pertanto, se si apre l'editor JSFiddle in IE 7/8, verrà comunque inviato al retro; ma se apri solo lo rendered HTML, non lo farai.

1

Il mio tentativo di "fissare" esso: http://jsfiddle.net/RCsuH/6/

@ josh3736 era quasi esattamente a destra, da qualche parte nel codice che sta sparando fuori un document.body.blur() che provoca la minimizzazione della finestra.

La mia correzione sostituisce semplicemente quella funzione con una funzione no-op. Non sono riuscito a ottenere i tag script per attivare un onload al termine del caricamento, quindi la sostituzione della funzione (se necessario) è lasciata a te.

Tuttavia, tutto questo sembra essere un bug nella libreria jQuery Mobile, e quindi probabilmente dovresti presentare una segnalazione di bug con loro. Tuttavia, non sono sicuro che li infastidirà troppo che c'è un bug su IE per un framework destinato a telefoni cellulari/tablet.

Nota: questo è un codice orribile e orribile che sostituisce le funzioni native. Se è possibile, non usare questo.

+0

* "Non sono sicuro che li infastidirà troppo che c'è un bug su IE per un framework che è inteso per telefoni cellulari/tablet . "* IE * è * su telefoni cellulari/tablet, e con i nuovi tablet Windows 8 in arrivo, che sarà IE9/10.Il mio sito consente all'utente di creare pagine mobili e * l'anteprima * per quello utilizza la pagina HTML/CSS/JS effettiva della loro pagina mobile (questa è una buona idea per ovvi motivi, giusto). Si rompe in IE9. – Mud

Problemi correlati