JavaScript dosyalarını sunarken, application / javascript veya application / x-javascript kullanmak daha mı iyidir


95

Bütün soru başlığa uyuyor. Ve biraz bağlam eklemek gerekirse: Spesifikasyonların söylediklerine göre neyin en iyi olduğunu sormuyorum, bunun yerine günümüzde kullanılan tarayıcıların karışımına göre en iyi neyin işe yaradığını soruyorum.

Bazı veri noktaları:

  • Google text/javascript, ana sayfalarında kullanılan JS için kullanır .
  • Google text/javascript, Google Dokümanlar'da kullanır .
  • Google, application/x-javascriptJavaScript dosyalarını Ajax kitaplıkları hizmetiyle sunmak için kullanır .
  • Yahoo application/x-javascript, JS'lerini sunmak için kullanır .
  • Yahoo application/x-javascript, ana sayfalarında sunulan JavaScript için kullanır .

4
Komik. Örneklerinizde üçüncü bir alternatif veriyorsunuz ... Ve Tim'e göre, her iki büyük oyuncu da yanılıyor (standartlara göre), bu muhtemelen yalnızca tarayıcıların hoşgörülü olduğu anlamına geliyor (burada büyük bir haber yok) ve önemi olmayabilir.
PhiLho

1
olası dupe: Javascript MIME Type
Bergi

Yanıtlar:


116
  • text/javascript eski
  • application/x-javascript … konumuna geçmeye karar verirken deneyseldi
  • application/javascript JS için geçerli resmi MIME türüdür

Bununla birlikte, tarayıcılar genellikle content-typesunucu tarafından gönderilenleri görmezden gelir ve typeözelliğe çok dikkat eder (ve bazıları henüz tanımayabilir application/javascript).

Benim önerim:

  • Sunucuda application / javascript kullanın
  • HTML 5 kullanın ve typeözelliği komut dosyası öğelerinden çıkarın

NB: HTML spesifikasyonu MIME standardıyla çelişiyor ve gelecekte değişebilmesi için onu tekrar değiştirmek için bir çaba var text/javascript.


3
Birkaç ay önceki bu soru tam tersini söylüyor. Birisi yanılıyor :) "Kelly haklı, tarayıcılar" stackoverflow.com/questions/189850/…
Marco

6
Oh hayır! Büyük, yekpare, yavaş organizasyonlar haklı olmalı! Spesifikasyon yanlış olmalı! Narghh. İçlerinden biri beni işe almış olsa bile, büyük (yavaş) şirketler üzerindeki teknik özelliklere ve kendi deneyimlerime güvenmeye devam edeceğim.
Quentin

1
Hmm, birisi W3C'ye text / javascript'in eski olduğunu söylemeyi unuttu. Gibi görünüyor varsayılan içinde HTML 5 . :: scratches head :: Ayrıca görünen o ki (bu bölümü üstünkörü okumam doğruysa) kullanıcı aracılarının sadece özniteliğe gitmesi gerekiyortype , bu yüzden Content-typedoğru davranışı görmezden geliyor .
big_m

1
@big_m - Bunun nedeni, birçok tarayıcının tanımamasıdır, application/javascriptbu nedenle bunu belirtmek, komut dosyasını yok saymalarına neden olur. Kullanıcı aracılarının Content-Type'ı göz ardı etmemesi gerekiyor. Type özelliği, onlara ne bekleyeceklerini söyler. Desteklemiyorlarsa, talep etme zahmetine girmemeleri gerekir. Sunucu daha sonra bunun farklı bir şey olduğunu söylüyorsa, HTML'nin söylediği yerine devam etmelidir (en azından HTTP'ye göre, farklı bir özelliğe bakıyor olabilirsiniz, herhangi bir bağlantı sağlamadınız).
Quentin

1
@Quentin, scriptbağlantılı olduğum öğenin HTML 5 bölümüne atıfta bulunuyordum. Benim o bölümü okumam anlattıklarınızdan farklı; typeözniteliğe çok önem veriyor gibi görünüyor Content-Typeve karakter kodlamasını belirlemek dışında , kontrol etmekten bahsetmiyor . Kullanıcı aracısının Content-Type'ın beklenenle eşleştiğini doğrulamasının akıllıca olacağını kabul ediyorum, ancak HTML spesifikasyonunda bunu gerektiren veya hatta bunu yapmayı öneren hiçbir şey bulamadım.
big_m


7

Sayfalarınızda js için application / javascript kullanmayı seçerseniz, IE7 ve IE8 komut dosyanızı çalıştırmayacaktır! İstediğiniz kadar Microsoft'u suçlayın, ancak çoğu kişinin sayfalarınızı çalıştırmasını istiyorsanız, metin / javascript kullanın.


3
"Application / javascript" işlevinin çalışmayacağını söylediğinizde, bunun HTTP yanıtında içerik türü olarak mı yoksa bir komut dosyası etiketinin "type" özniteliği olarak mı ayarlandığını mı kastediyorsunuz? Asıl soru, HTTP yanıtlarındaki içerik türü hakkındaydı. Diğer yanıtlara göre, yalnızca komut dosyası etiketlerindeki "type" özniteliğinin değeri, IE'de her iki şekilde de bir fark yaratacak gibi görünüyor.
Jesse Hallett

7

Eskiden öyleydi language="javacript". Sonra olarak değişti type="text/javascript". Şimdi öyle type="application/javacript". Tamam bu aptallaşmaya başladı. Bazı eski tarayıcılar yeniyi tanımaz application/javascript, ancak yine de eskisini tanır text/javascript. Bunu kullanmaya devam etmeyi planlıyorsanız, yoksa HER örneğini değiştirmeye çalışmak benim zaman saat atık edeceğiz text/javascriptiçine application/javascript.
Şimdi bir gün bunun tersi doğru olabilir. Bir gün en yeni tarayıcılar, tamamen standartlara uygun olmak için eski tekniği reddedebilir.
Ancak, web sitemi görüntüleyen kişiler "tarayıcımı yükselttiğimden beri, web sitenizin yaklaşık% 50'sinin kaybolduğundan" şikayet etmeye başlayana kadar, web sitemdeki kodu değiştirmek için hiçbir nedenim kalmadı.


7

İşte bu sorunun 2020 cevabı.

text/javascriptHTML Standardına göre doğru JavaScript MIME türüdür ve şunları belirtir:

Sunucular text/javascriptJavaScript kaynakları için kullanmalıdır . Sunucular, JavaScript kaynakları için diğer JavaScript MIME türlerini kullanmamalı ve JavaScript olmayan MIME türlerini kullanmamalıdır.

Ve ayrıca :

[…] Bu belirtimde JavaScript'e atıfta bulunmak için kullanılan MIME türü text/javascript, RFC 4329'a göre resmi olarak kullanılmayan bir tür olmasına rağmen en yaygın kullanılan türdür.

IETF düzeyinde bir RFC'de bu gerçeği yansıtmak için çalışmalar devam ediyor: https://datatracker.ietf.org/doc/draft-ietf-dispatch-javascript-mjs/

" text/javascriptEski olan" iddiası, hem HTML Standardı hem de yukarıda bahsedilen IETF taslağının (yani yaklaşan bir RFC) açıkça düzelttiği RFC 4329'a dayalıdır.


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.