Komut dosyası etiketleri içindeki HTML yorumları en iyi uygulama mıdır? [kapalı]


97

Aşağıdaki uygulama, birlikte çalışmam gereken satır içi JavaScript'te oldukça yaygındır:

<script type="text/javascript">
   <!--
       // Code goes here
   //-->
</script>

Asıl amacın JavaScript ile uyumlu olmayan tarayıcıların kaynağı oluşturmasını engellemek olduğunu biliyorum, ancak bu bugün hala en iyi uygulama mı? Günümüzde kullanılan tarayıcıların büyük çoğunluğu JavaScript'i yorumlayabilir; modern mobil cihazlar bile genellikle sorun yaşamaz.

Neden olmasın? soru: Son zamanlarda, bazı sayfaların derinliklerine gömülü bir komut dosyası etiketinin sonundaki '//' işaretinin önünde '//' işaretinin bırakıldığı bir sorunu gidermek için birkaç saat harcamak zorunda kaldım ve bu, gizemli JavaScript'e neden oluyordu hatalar.

Ne yaparsın? Bu hala bir 'en iyi uygulama' olarak kabul ediliyor mu?


Yanıtlar:


119

Önemli olan günümüzde, belirli bir tarayıcının JavaScript'i destekleyip desteklememesinin alakasız olmasıdır (açıkça büyük çoğunluk bunu yapıyor) - bu alakasız çünkü neredeyse hepsi komut dosyası bloklarını anlıyor, bu da yapamasalar bile JavaScript'i görmezden gelmeyi bildikleri anlamına geliyor. yorumlayın.

Matt Kruse biraz verir daha ayrıntılı bir açıklama yaptığı üzerinde JavaScript Toolbox özellikle niçin sitede değil komut blokları içinde HTML yorumlar kullanmak.

O sayfadan alıntı:


Komut Dosyası Bloklarında HTML Yorumları Kullanmayın

Javascript'in eski günlerinde (1995), Netscape 1.0 gibi bazı tarayıcıların komut dosyası etiketi ile ilgili herhangi bir desteği veya bilgisi yoktu. Bu nedenle, javascript ilk yayınlandığında, kodu sayfada metin olarak göstermemeleri için eski tarayıcılardan gizlemek için bir teknik gerekliydi. 'Hack', kodu gizlemek için komut dosyası bloğu içinde HTML yorumlarını kullanmaktı.

Komut Dosyasında HTML Yorumlarını Kullanmak Kötü

// DON'T do this! Code is just representative on how things were done
<script language="javascript">
<!--
   // code here
//-->
</script>

Günümüzde ortak kullanımda olan hiçbir tarayıcı <script> etiketinden habersiz değildir, dolayısıyla javascript kaynağının gizlenmesi artık gerekli değildir. Aslında, aşağıdaki nedenlerden dolayı zararlı kabul edilebilir:

  • XHTML belgelerinde, kaynak aslında tüm tarayıcılardan gizlenecek ve işe yaramaz hale getirilecektir.
  • - HTML yorumlarında izin verilmez, bu nedenle koddaki herhangi bir azaltma işlemi geçersizdir

1
+1. Comp.lang.javascript günlerimden bu konu hakkında pek çok bilgiye sahip olan biri olduğunu biliyordum, cevabınız göründüğünde Matt'den alıntı yaparak haber grubu arşivlerini inceliyordum.
Grant Wagner

1
XHTML'de, HTML yorumu yerine bir CDATA kullanabilirsiniz: <script ...> // <! [CDATA [... //]]> </script>
Concrete Gannet

Bu 'hack''in Internet Explorer 9'da bir hata oluşturduğunu eklemeliyim (Bir müşteri düzgün çalışmayan bir sayfadan şikayet etti ve nedeni
buydu

24

Yapmayı bıraktım. Bir noktada, NCSA Mozaiğinizi bırakmanız yeterlidir.


7
Diğer bir deyişle, OP'nin bunu yapmayı neden bırakması gerektiğine dair herhangi bir neden yoktur . Yapmayı bırakmasını öneriyorsun çünkü sen yaptın, bu da IMO'ya cevap olmak için yeterince iyi bir neden değil.
Lawrence Aiello

1
@LawrenceAiello: "En iyi uygulama" ifadesi, "fikirler" yerine "gerçekler" hakkında düşünmenizi sağlar?
kaos

5
İşte bu yazının tamamındaki nihai hata burada yatıyor. Tartışma sorusu olduğu için kapatılmalıydı.
Lawrence Aiello

1
Belki de bu altı yıl önce yayınlandığında bir cevap olarak nitelendirilir, ancak sitenin bugünkü standartlarına göre değil.
j08691

1
Bu cevap Meta SO
CubeJockey'de

10

Gereğince W3C tavsiyesi de kullanıcı aracıları gelen komut verileri saklamak için esas olarak faydalı oldu.

W3c sayfasından alıntılanmıştır :

JavaScript'te komut dosyalarını yorumlama JavaScript motoru, dizenin "<!--"bir SCRIPT öğesinin başlangıcında olmasına izin verir ve satırın sonuna kadar diğer karakterleri yok sayar. JavaScript, "//" ifadesini geçerli satırın sonuna kadar uzanan bir açıklama olarak yorumlar. Bu, "->" dizesini JavaScript ayrıştırıcısından gizlemek için gereklidir.

    <SCRIPT type="text/javascript">
<!--  to hide script contents from old browsers
  function square(i) {
    document.write("The call passed ", i ," to the function.","<BR>")
    return i * i
  }
  document.write("The function returned ",square(5),".")
// end hiding contents from old browsers  -->
</SCRIPT>

2
HTML 4.x kullanılıyorsa. XHTML ile oldukça farklı bir hikaye.
Quentin

8

Hayır, komut dosyası öğesi ilk kez tanıtıldığında kullanılan bir geçici çözümden kaynaklanan bir akşamdan kalma. Bugün hiçbir tarayıcı komut dosyası öğesini anlayamıyor ("komut dosyası kapalı olduğu veya desteklenmediği için yok sayılması gereken komut dosyası" olarak anlasa bile).

XHTML'de aktif olarak zararlıdırlar.

Bir süre önce bunun tarihi hakkında bir şeyler yazmıştım .


3

Bunu kullanmayı bir süre önce bıraktım. Ayrıca, Douglas Crockford'a göre , çoğu tarayıcıda kullanılabilen tek kodlama dili JavaScript olduğundan, type niteliğini komut dosyası etiketlerinizden kaldırabilirsiniz .


1
Çoğu tarayıcı yine de çalışacaktır, ancak HTML spesifikasyonunu ihlal etmektedir, bu yüzden tavsiye etmem.
Quentin

4
IE varsayılan türü olarak VB script alacak bilemezsiniz ..
Francis

1

Manuel olarak yazıyorsanız, her zaman harici js dosyalarını kullanmanızı öneririm, bu çok yardımcı olur.

Endişenizle ilgili olarak: çoğu tarayıcı bugün JavaScript güvenlidir. Ancak bazen insanlar bir HTML'yi doğrudan getirmek için basit ayrıştırıcılar yazabilirler - ve söylemeliyim ki, güvenli alıntı bu müşteriler için gerçekten yararlıdır. Ayrıca eski Lynx gibi JS olmayan bazı istemciler bundan fayda sağlayacaktır.


1

Komut dosyası etiketleri arasına değişmez metin eklemezseniz, yani, src dosyalarından komut dosyaları yüklerseniz, yorumları unutabilirsiniz.



0

Bunu yapmayı yıllar önce bıraktım. Bu çağda buna gerçekten ihtiyacın yok.


@Yvette Cevabımı gönderdikten altı yıl sonra bu yorumu göndermek için motivasyonunuz nedir?
John Topley

@Yvette Alınma, sadece merak ettim. Ve tabii ki haklısın; bugünlerde bunu bir yorum olarak yayınlardım.
John Topley

-1

Bunu yapmıyorum ama geçen gün w3c'de şifre korumalı sitemi doğrulamaya gittim. Bu yüzden doğrudan giriş yöntemlerini kullanmak zorunda kaldım. JavaScript'imden şikayet etti, bu yüzden yorumları geri koydum her şey yolundaydı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.