2010-02-11 10 views
9

Abbiamo qualche JavaScript che scrive uno script incluso in una risorsa dinamica nella nostra pagina Web per permetterci di comunicare alcune informazioni tra le pagine servite da diversi server che sono soggetti a restrizioni di scripting cross site.IE a intermittenza non esegue un file di script aggiunto dinamicamente

L'idea è che il browser richieda il file JavaScript che è servito da una risorsa dinamica sul lato server (che mette anche alcune informazioni lato server nella richiesta). Il file JavaScript viene quindi eseguito dal browser quando viene aggiunto alla pagina.

Abbiamo riscontrato un problema con Internet Explorer in cui il codice JavaScript restituito nella risposta non viene eseguito in modo intermittente quando viene aggiunto alla pagina. Ispezionare una traccia HTTP Fiddler quando si verifica il problema mostra che lo script è stato correttamente restituito al browser.

per testare questo in modo più affidabile, ho modificato il codice che aggiunge lo script per l'esecuzione 1000 volte in un ciclo, come di seguito:

for (var i = 1; i <= 1000; i++) { 
    try { 
     var script = document.createElement("SCRIPT"); 
     script.src = serverHome + "/ajavascriptfile.js?token=" + token + "&num=" + i; 
     script.id = token; 
     document.getElementsByTagName("HEAD")[0].appendChild(script); 
    } catch (e) { 
     alert(e); 
    } 
} 

Lo script restituito da ajavascriptfile.js incrementa semplicemente un contatore sulla mia pagina:

var output = document.getElementById("output"); 
output.innerHTML = parseInt(output.innerHTML) + 1; 

In questo test non si verificano mai interferenze o allarmi.

Se eseguito correttamente, il contatore dovrebbe arrivare a 1000 (cosa che fa in Firefox). Tuttavia in IE6 è in media 900-950, IE7 è circa 995-998 e IE8 è uno scioccante 750-800.

Qualcuno ha riscontrato che Internet Explorer non esegue script inclusi dinamicamente? Se è così, sai come risolvere questo problema?

+0

Avete un '' dichiarato nella pagina per caso? –

+0

No Non ho nella pagina. –

+0

Sto lavorando a questo problema, ma non sono sicuro perché è sbagliato! – JustEngland

risposta

0

Internet Explorer può memorizzare nella cache il file di script. Prova ad aggiungere un po 'di entropia supplementare alla src includono:

script.src = serverHome + "/ajavascriptfile.js?token=" + token + "&num=" + i + '&r=' + Math.random(); 
+0

Il "" & num = "+ i" sarà univoco per ogni richiesta, quindi il caching non dovrebbe essere un problema. Se rimuovo "" & num = "+ i", IE7 esegue una sola richiesta al server e il contatore arriva a 1000 quasi istantaneamente. Si noti inoltre che in circostanze normali (in cui questo problema è stato riscontrato per la prima volta), esiste una sola richiesta. Lo chiedo solo 1000 volte per provarlo e riprodurlo in modo più affidabile. –

+0

Nei sistemi di produzione il caching potrebbe essere ancora un problema, ovvero gli URL degli script sono univoci ogni volta che vengono richiesti in un ambiente di produzione? Ad ogni modo (sia in un ciclo di prova o in produzione) il comportamento di IE è inaspettato/rotto. – leepowers

+0

@James: IE potrebbe ancora memorizzare nella cache anche con & num a seconda di quante volte hai richiesto lo stesso URL durante il test. Come ha detto pygorex1, aggiungi un po 'più di entropia. Forse un valore di timestamp o qualcosa del genere. – NotMe

1

Può essere che gli script non sono in coda nell'ordine in cui vengono aggiunti alla testa, ma vengono interpretati come appena sono ActiveState è completa, dalla cache o da un download. Se lo script richiesto prima gli ultimi carichi, può causare un problema.

IE8 permette 6 script simultanei, penso che IE7 ha permesso 4, e 6 permesso 2.

Ho visto questo in Opera, Chrome e Safari, così, (ma non Firefox ancora) quindi se sto caricando di più di uno script, tengo in esecuzione tutti i comandi finché non so che le risorse sono disponibili, in genere testando il tipo di una funzione dal file richiesto e una richiamata con il timer se non trovata.

+0

Questo potrebbe essere il caso. Tuttavia ho riprodotto questo problema quando aggiungo solo un singolo script alla pagina. Ho aggiunto il ciclo per poter riprodurre il problema in modo più affidabile. –

Problemi correlati