<script> etiketlerinizde belirtilen metin / javascript gerekiyor mu?


157

Artık komut dosyası etiketlerinizdeki gibi type="text/javascript"tuhaf CDATAve <!--şeylere ihtiyacınız olmayan bir yerde okudum . Yani, yerine:

<script type="text/javascript">
//<![CDATA[
<!--

    //your script here

-->
//]]>
</script>

Yapmanız gerekenler:

<script>
    //your script here
</script>

Bunu nereden okuduğumu hatırlamıyorum. Sanırım bir Google veya Yahoo mühendisinden geliyordu ve özellikle hangi tarayıcıların bu arkaik yapılara ihtiyaç duyduğunu ve nedenini belirtti. Bunun hangi blog yazısı / makalesi hakkında konuşulduğunu bilen veya bununla ilgili iyi bir kaynağa sahip olan var mı?


Yeni tarayıcılar için, ancak daha eski sürümlerde (hala varsa) <! - -> gereklidir. Bazı uygulamalardaki tür hakkında atlanmadıysa, doğru olana ihtiyaç duyar.
Baküdan

1
CDATA hakkında iyi okuma: stackoverflow.com/questions/66837/…
kapa

1
text/javascriptBelirtilen bir dosyayı her açışımda kaldırıyorum. Gürültü.
Muffin Man

Çok ilgili yazılan buraya kabul cevap HTML5 yönergeleri hakkında yukarı güncel bilgiye sahip.
RBT

Yanıtlar:


135

Bkz üzerinde Crockford en yazma-up <script>etiketi en önemlisi,:

<!-- //-->Kesmeyi komut dosyalarıyla kullanmayın . Komut dosyalarının birinci nesil tarayıcılarda Netscape 1 ve Mosaic'te metin olarak görünmesini önlemek amaçlanmıştır. Uzun yıllardır gerekli değildir. <!-- //-->bir HTML yorumuna işaret etmesi gerekiyor. Yorumlar göz ardı edilmeli, derlenmemeli ve yürütülmemelidir. Ayrıca, HTML yorumları dahil edilmeyeceğinden --, azaltılan bir komut dosyasında HTML hatası vardır.

...

type="text/javascript"

Bu özellik isteğe bağlıdır. Netscape 2'den beri, tüm tarayıcılardaki varsayılan programlama dili JavaScript'tir. XHTML'de bu özellik gereklidir ve gereksizdir. HTML'de, dışarıda bırakmak daha iyidir. Tarayıcı ne yapacağını bilir.


75
Gerekli ve gereksiz mi? Bir şey mi kaçırıyorum?
Izkata

17
@Izkata, doğrulama için gerekli, ancak herhangi bir etkisi yok.
bdukes

14
"Tarayıcı ne yapacağını biliyor" ... şimdilik. Gelecek hafta RubyScript'in (bunu örnek olarak hazırladım) popüler hale getirildiği ve herkesin pantolonunu benimsemesi için kıstığı hafta ne olacak? Bu, insanların dosyalarını "_new" olarak adlandırmasını ve yıllarca başkalarını karıştırmasını sağlayan aynı tür kısa görüşlü düşünce. "_New" mi? Veya "_new_new"? Veya daha yeni"? IMO kısa görüşlü.
Slobaum

18
@Slobaum, HTML5 spesifikasyonu varsayılan olarak JavaScript olduğunu belirtir . Yeni komut dosyası türleri varsa, bunlar yalnızca spesifikasyondan varsayılanı destekleyen yeni tarayıcı sürümlerinde uygulanır.
bdukes

8
eğer RubyScriptpopüler olur, içinde sona erecek .rbscriptve tarayıcı göre hareket edecektir.
Kirk Strobeck

45

Bu bir Crockford önerisi. Başka bir yerde yankılandığını gördüm (ppk belki?). HTML5 spesifikasyonu gerektirmez.

İşin garibi, biraz haline geldi geleceği, işareti için "tip" özelliğini kullanmak için <script>bunu blokları yok değerlendirilecek istiyorum:

<script type='text/html-template'>
  <div> this is a template </div>
</script>

Garip bir JavaScript olmayan tip vererek, (script bloğunda muhtemelen diğer JavaScript kodu tarafından kullanılmak üzere sayfasına şeyler ham metin için bir yol almak için değerlendirilecektir).


tam olarak anlayamıyorum. lütfen açıklayın, ne anlama type="text/html"geliyor, ne anlama text/javascriptgeliyor .. teşekkürler
T.Todua

4
@tazotodua "metin / html" nin ne anlama geldiği pek önemli değil; önemli olan "metin / javascript" olmaması , tarayıcılar <script>bloğun içeriğini tamamen görmezden gelecektir . Ancak, DOM'nin bir parçası <script> olacak , böylece diğer JavaScript kodu bunları bulabilir ve içeriğini çıkarabilir.
Sivri

Bu ilginç bir hack. Ne için kullanacağımdan emin değilim.
brennanyoung

2
W3Schools : In HTML5, the type attribute is no longer required for JavaScript. The default value is "application/javascript".
Amin Soheyli

19

HTML5'in type="text/javascript"(varsayılan) olması gerekmez .

CDATA komut dosyasında HTML karakterleri ('<' ve '>' gibi) varsa yalnızca XHTML sayfaları için gereklidir.

<!-- yalnızca OLD tarayıcılar için gereklidir.



3

Tipi özelliği bir komut dosyası öğesi içinde gömülü veya elementin src niteliği yoluyla başvurulan kod kodlama dili tanımlar. Bu bir MIME türü olarak belirtilir; desteklenen MIME türlerine örnek olarak metin / javascript, metin / ecmascript, application / javascript ve application / ecmascript verilebilir.

HTML 4.01 Spesifikasyonuna Göre

Tip özellik öğenin içeriğinin kodlama dili belirtir ve varsayılan kodlama dili geçersiz kılar. Komut dosyası dili bir içerik türü olarak belirtilir (örneğin, "metin / javascript"). Yazarlar bu özellik için bir değer sağlamalıdır. Bu özellik için varsayılan bir değer yok.

Ancak HTML5'te text/javascript varsayılan türdür, bu nedenle atlayabilirsiniz

Tip nitelik verilerinin senaryo veya biçimi dilini verir. Özellik mevcutsa, değeri geçerli bir MIME türü olmalıdır. Charset parametresi belirtilmemelidir. Öznitelik yoksa kullanılan varsayılan "metin / javascript" tir.


1
Başka bir deyişle, bunu atlamak HTML5'i desteklemeyen eski tarayıcılarda hatalara neden olabilir
Serge

2

HTML5 tarayıcıları, metin / javascript'i neredeyse her zaman tahmin etseler bile, yine de HTML5'teki metin / javascript varsayılan olarak otomatik olarak yazılırken , bu makaleyi düşünüyor olabilirsiniz. .


1

scriptbloğun başlıklara göre doğru yorumlanması tarayıcıya kalmıştır , inanıyorum, typeözniteliğe değil . Sorunuzu cevaplamak için hayır, modern tarayıcılar için gerekli değildir (IE7 +, FF, Webkit'den bahsediyorum). Bundan daha eski tarayıcıları destekliyorsanız ... Senin için üzülüyorum =)


2
Birçoğu hala IE6 kullanan 385+ milyon kullanıcıyla Çin'i unutmayın. netmarketshare.com/…
chainwork

3
Çin'in sıkı internet politikasını bilerek, siteniz asla onlara ulaşamayabilir = P
hellatan

Soru satır içi komut dosyasıyla ilgilidir, bu nedenle ana sayfadan başka bir başlık yoktur (bazı HTML içerik türleri olacaktır). Her neyse, tarayıcıların başlıkları dikkate aldığını belirten bir kaynağınız var mı (örneğin, düz <script src = "bir şey"> </script> varsa ve bir VBScript üstbilgisi sunduysanız, VBScript olarak yorumlayacak herhangi bir tarayıcı var mı?) ?
Matthew Flaschen

1

Eğer bir komut dosyası etiketi koyarak ediyorsanız SVG içeride sen gerekir tipi özelliğini belirtin. Ve daha "text/ecmascript"ziyade olmalı "text/javascript".

Komut dosyanız satır içi (bağlı değil) ise, komut dosyası gövdesini bir CDATA bildirimine de sarmanız gerekir. SVG (ve diğer XML varyantları) için satır içi komut dosyası

<script type="text/ecmascript">
<![CDATA[
// your javascript code goes here
]]>
</script>

Bunlar 'vahşi doğada' özel durumlar olabilir, ancak yeterince gerçekler ve SVG kullanımı büyüyor, bu nedenle herkesin tür tarayıcısının ve CDATA'nın modern tarayıcılarda tamamen eski olduğunu öne sürmesi yanlış. Kullanım durumları dar, evet, ama duyulmamış.

"Ortamı tersine çevirin ve her bilgelik çılgınlığın en kötüsü haline gelir." - Ashby


1
İyi karar. Sadece bazı karmaşık SVG üzerinde çalışıyorlar ve bu gerçekten böyle!
Dave Everitt

1

👉🏻 HTML5 özellikleri dürtüler yazarlar özelliği ihmal yerine bir yedek MIME türü sağlamaktır. MDN

MIME Algılama Standart JavaScript herhangi MIME türü (kullanılarak sunulabilir sağlayan Çok Amaçlı İnternet Posta Uzantıları aşağıdaki maçları):

<script type="application/javascript"></script>
<script type="application/ecmascript"></script>

<script type="text/javascript"></script>
<script type="text/ecmascript"></script>

0

Peki ben metin / javascript olmadan daha fazla örnek görmeye devam ama bazı nedenlerden dolayı ben bunu yaparken benim komut dosyaları FF çalışmaz. Metin / javascript bildirimini saklamanızı tavsiye ederim. CDATA etiketi, tarayıcınızda javascript kapalıysa javascript'in web sitenizde düz metin olarak gösterilmesini engeller. Şahsen ben bu etiketleri artık kullanmadan dışarıda bir sürü kullanıcı olduğunu düşünmüyorum ve eğer oradalarsa bazı beyinler yetiştirmek isteyebilirler: P


Gerçekten antika tarayıcıları gerçekten hedeflemek istemiyorsanız, type özelliği veya eski CDATA öğesi gerekmez. Doğru türü kullandığınız sürece hiçbir şeye zarar vermemelidirler.
Sivri

En son kararlı FF sürümü kullanıyorum ve metin / javascript bildirimi olmadan ayrıştırma sorun var gibi görünüyor, ben jQuery btw kullanın ama bu bir fark yaratmamalıdır.
Michael

Tüm web uygulamamı sadece düz <script>, "dil" ve "tip" olmayan komut dosyası etiketleriyle çalıştırıyorum ve tüm tarayıcılarda iyi çalışıyorlar. (Eh, tüm makul olanları: FF, Chrome, Safari, IE, Opera.)
Pointy

1
@pointy, FatherStorm'un neden böyle olduğuna bir cevap gönderdi. yorumlarınız yanlış gibi görünüyor.
Michael

@Michael, XHTML / Strict ile devam etme hatasını yaptıysanız bir sorununuz olabilir, ancak o zaman bile şüpheliyim. JavaScript dünyasının armatürleri arasında "type" özelliğinin gereksiz olduğuna dair genel bir anlaşma vardır ve aslında kötü bir "type" bir komut dosyasını kıracağından, sadece bir hata kaynağıdır.
Sivri

0

type="text/javascript" : HTML 4 ve XHTML'de gerekir, ancak HTML5'te isteğe bağlıdır.

CDATA : XHTML'de gereklidir.

<!--: JavaScript'i çok eski tarayıcılardan gizlemek için kullanılır. Örneğin: Netscape 1 ve Internet Explorer 2, bunların hiçbiri daha fazla kullanmıyor.

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.