2010-02-11 20 views
9

Web sitemizdeki dinamik bir kaynağa komut dosyası yazan bazı JavaScript'lere sahibiz. siteler arası komut dosyası kısıtlamaları.IE aralıklı olarak dinamik olarak eklenmiş bir komut dosyası yürütmez

Buradaki fikir, tarayıcının, sunucu tarafındaki dinamik bir kaynak tarafından sunulan (istek üzerine bazı sunucu tarafı bilgilerini de İsteğin içine koyan) JavaScript dosyasını istemesidir. JavaScript dosyası daha sonra sayfaya eklendiğinde tarayıcı tarafından yürütülür.

Internet Explorer'da, yanıtta döndürülen JavaScript'in sayfaya eklendiğinde aralıklı olarak yürütülmediği bir sorunla karşılaştık. Sorun oluştuğunda bir Fiddler HTTP izlemesi incelendiğinde, betiğin tarayıcıya başarıyla döndüğü gösterilmektedir.

Ben aşağıda bir döngüde 1000 kez çalıştırmak için komut dosyası ekler kod değişmiş, daha güvenilir Bunu sınamak için:

: ajavascriptfile.js tarafından döndürülen script sadece sayfamda bir sayacı artırır
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); 
    } 
} 

Bu sınamada hiçbir özel durum hiç yakalanmamış veya uyarılmamıştır.

Bu işlem düzgün bir şekilde yürütülürse, sayaç 1000'e (Firefox'taki) ulaşmalıdır. Ancak IE6'da ortalama 900-950, IE7 995-998 civarında ve IE8 ise 750-800 şok edici.

Internet Explorer, dinamik olarak dahil edilen komut dosyalarını yürütmeyen başka biriyle karşılaştı mı? Eğer öyleyse, bu sorunu nasıl çözeceğinizi biliyor musunuz?

+0

Sayfada bildirilen bir '' var mı? –

+0

Hayır Sayfada yok. –

+0

Bu sorun üzerinde çalışıyorum ama emin değilim whyat yanlıştır! – JustEngland

cevap

0

Internet Explorer komut dosyası önbelleğe alınmış olabilir. src bazı ek entropi eklemeyi deneyin şunlardır:

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

'' & num = "+ i 'her istek için benzersiz olacak, bu nedenle önbelleğe alma bir sorun olmamalıdır. Eğer '"& num =" + i' i kaldırırsam, IE7 sadece sunucuya tek bir istek yapar ve sayaç neredeyse anında 1000'e çıkar. Ayrıca, normal koşullar altında (bu sorunun ilk olarak karşılaşıldığı), yalnızca tek bir istek olduğunu unutmayın. Sadece daha güvenilir bir şekilde denemek ve yeniden üretmek için 1000 kez talep ediyorum. –

+0

Üretim sistemlerinde önbelleğe alma hala bir sorun olabilir; başka bir deyişle, üretim ortamında istedikleri her defasında benzersiz olan komut dosyası URL'leri midir? Her iki durumda da (test döngüsünde veya üretimde olsun) IE davranışı beklenmedik/bozuk. – leepowers

+0

@James: IE, testiniz sırasında aynı URL’yi kaç kez istemiş olduğunuza bağlı olarak & num’le bile hala önbelleğe alınmış olabilir. Pygorex1 dediği gibi, biraz daha entropi ekleyin. Belki bir zaman damgası değeri ya da bunun gibi bir şey. – NotMe

1

Bu komut onlar kafasına eklenir sırayla kuyruk değil, ancak bunlar ActiveState tamamlandıktan konum en kısa sürede yorumlanır ediliyor olabilir, önbellekten ya da bir indirmeden. En son yüklemeyi istediğiniz komut dosyası ilk olarak bir soruna neden olabilir. ,

IE8 ben IE7 4 izin düşünüyorum, 6 eşzamanlı komut verir ve 6 ben de Opera, Chrome ve Safari bu gördük

2. izin (ancak firefox henüz) bu yüzden daha yükleniyor ediyorsam Bir betikte, kaynakların mevcut olduğunu bilmeden, herhangi bir komut çalıştırıyorum - genellikle gerekli dosyadan bir fonksiyonun tipini test ederek ve bulunmazsa bir geri çağırma ile.

+0

Bu durum böyle olabilir. Ancak, bu soruyu sayfaya yalnızca tek bir komut dosyası eklerken yeniden ürettim. Sorunu daha güvenilir bir şekilde yeniden üretebilmek için döngüyü ekledim. –

İlgili konular