2010-08-01 9 views

cevap

4

Ben size söylemek sürece, bu konuda bir şey dinamik JS ile sayfanın içeriğini yeniden yazmak ve zorla bir Doctype'ı ekleyemezsiniz inanıyoruz.

Eğer <body> üzerinde ne kadar kontrol özelliklerini inceleyeceğiz gidebilir miyim? JS/komut dosyası oluşturma izniniz var mı?

EDIT: İşte bir girişim ama bunu IE'de test etmedim. Size fikir verebilir. I document.write()outerHTML'un document.documentElement ve compatMode'u CSS1Compat'a dönüştürür.

Yeniden yazdıktan sonra komut satırını çıkarmanız gerekebilir. Ben , dediğim gibi ben gerçekten çalışıyor tavsiye etmem bu ...

http://medero.org/first-line.html

DÜZENLEME 2.: Şaşırtıcı IE6 çalışıyor gibi görünüyor. Ancak yenilendiğinde, IE bir şekilde önbelleğe alır ve kalıcı olarak .document.write() biçiminde kalır. Buna karşı koymak için, bir sorgu dizesiyle ekleyin, örneğin ?203984234.

Yine, senin durumun ne olduğundan emin değilim, ama bu fikirler verir veya yardımcı olur.

DÜZENLEME 3.: Ben yeniden yazdım ve window.onload için document.write bağlı. Etkisi görmek için her ziyaret ettiğinizde benzersiz bir sorgu dizesi eklemeniz gerekir, çünkü .write 'un ardından onu önbelleğe alır.

http://medero.org/rewrite.html?f30324433322111

daha anlık bir şey gerekiyorsa muhtemelen jQuery'nin DOM hazır fonksiyon penceresi yüklenmeden önce yeniden yazmak jack olabilir.


Çeşitli Notlar: görsel olarak

  • Muhtemelen böylece outerHTML kaydetmeden önce document.write <script> şerit gerektiğini konularda

    • Muhtemelen document.write kadar CSS aracılığıyla tüm html belgeyi gizlemek olabilir çağrılır Yeni yazılan sayfa script bloğuna sahip değil.
  • +0

    Bunun işe yaramayacağından kuşkuluyum. Sayfa zaten oluşturuldu. Bir doctype dinamik olarak eklerseniz, IE bunu algılar ve sayfayı yeniden oluşturmayı seçecektir. IE bunu yapabiliyorsa, 'document.documentMode' özelliğinin salt okunur olmadığını düşünürdüm. –

    +0

    Bir girişim ile güncelledim. –

    +0

    İlginç, gerçekte olduğu gibi gerçekten de işe yaramış gibi görünüyor. Kenar boşluğu ve dolgu ile bir div ekleyin ve IE'nin kutu modeli değiştikçe değişiklik boyutunu izleyin. –

    1

    Bu MSDN dosyasına Defining Document Compatibility makaleye bakabilirsiniz. Belki de X-UA-Compatible meta etiketini yazacaksınız.

    +1

    Partiye geç kaldı, ama ben sadece 'X-UA-Compatible' meta'sini denedim ve işe yaradı. Yine de denediğimde şanslıydım… görünüşe göre bunu HEAD etiketinizin başına koymanız gerekiyor ("X-UA-Uyumlu başlık, büyük/küçük harfe duyarlı değildir, ancak web sayfasının başlığında görünmelidir." başlık öğesi ve diğer meta öğeler dışındaki tüm diğer öğelerden önce. "http://goo.gl/xe3Ff). Ayrıca IE, tarayıcı penceresi açık olduğu sürece oluşturma modunu "önbelleğe alır", böylece pencerenizi kapatmayı ve açmayı deneyin. HEAD etiketi üzerinde kontrolüm var ama ... orijinal posteri yapmadı. – thirdender

    0

    Burada, based on meder's answer bunu çözmek başardı nasıl.

    İlk X-UA-Compatible meta dışarı yazma çalıştı ama bu işe yaramadı.belgenin sonunda

    (ya da baş, ama bu da erişim yoktu):

    <script type="text/javascript"> 
    if (navigator.appName == 'Microsoft Internet Explorer'){ 
        window.onload=function(){ 
         if (document.documentMode == 5){ 
          contents = document.documentElement.outerHTML; 
          newdoc = document.open("text/html", "replace"); 
          newdoc.writeln('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'); 
          newdoc.write(contents); 
          newdoc.close(); 
         } 
        }; 
    } 
    </script> 
    

    if sonsuz bir döngü önlemektir. Kodun kendiliğinden çıkarılması daha iyi olur, bir işlev koyarak ve işlev çağrısını string.replace() ile kaldırarak söyleyebilirim, ancak bunu işe yaratabilmem için bunun yerine yerleşmek zorunda kaldım.

    İlgili konular