Chrome, “Kaynak komut dosyası olarak yorumlandı ancak MIME türü metin / düz ile aktarıldı.” Diyor.


316

FF ve tümünde, benim javascript iyi çalışıyor. Ancak Chrome'da şu mesajı verir:

Kaynak komut dosyası olarak yorumlandı ancak MIME türü metin / düz ile aktarıldı.

Tüm komut dosyası etiketlerini kontrol ettim ve hepsinde MIME type="text/javascript". Hatta jquery ve jquery ui ile söylüyor. Chrome'da sorun nedir?

Sorun ve bunun çözümü nedir? Tarayıcının 'seçeneklerinde' değiştirmem gereken bir şey mi yoksa sunucudan mı yoksa kodumu değiştirmem gerekiyor mu?


14
Bazı kodlar yardımcı olabilir. Ne kadar cazip olursa olsun, derleyiciyi (tarayıcıyı) asla suçlamayın çünkü neredeyse her zaman yanılıyorsunuz.
msw

merak konusu olarak html5 kullanıyor musunuz?
bollo

Yanıtlar:


203

Bu, sunucunun bir Javascript HTTP yanıtı gönderdiği anlamına gelir.

Content-Type: text/plain

Sunucuyu bir JavaScript yanıtı gönderecek şekilde yapılandırmanız gerekir

Content-Type: application/javascript

3
Weblogic Server 11g kullanıyorum, ancak MIME'ı nerede yapılandırabileceğimi bilmiyorum. Lütfen, bana yolu gösterebilir misin?
Ağustos'ta Shaoz

6
Hmm ne sunucu yok, ama komut dosyası aslında yerel dosya sisteminizde bir JSONP dosyası olduğunda? Sanırım ciddi olmadığından ve kontrolünüzün ötesinde olduğu için uyarıyı görmezden geliyor musunuz?
hippietrail

2
O olmalı content-type:application/javascript, gerçi application/x-javascriptolduğunu değil , bir RFC veya ECMAScript standardı.
Jasdeep Khalsa

Birçok benzer soru var. Bu cevap benim için kolay bir çözümdü: stackoverflow.com/a/12057490/1617395
Joe Leo

@JoeLeo: Bu IIS için.
SLaks

124

Bunun jQuery veya istemci tarafı kod kodunun herhangi bir tuhaflığı ile ilgisi yoktur. Bu bir sunucu tarafı sorunudur: Sunucu (-side uygulaması), istemci tarafı komut dosyası kaynağı için beklenen HTTP Content-Typeüstbilgisi alanı değerini göndermiyor . Bu durum, Web sunucusu yetersiz yapılandırılmış, yanlış yapılandırılmışsa veya bir sunucu tarafı uygulaması (örn. PHP) istemci tarafı komut dosyası kaynağı oluşturuyorsa oluşur.

JavaScript gibi ECMAScript uygulamaları için uygun MIME ortam türleri şunları içerir:

  • text/javascript( eski olarak kaydedilmiş , kullanımdan kaldırılmamış; ancak yine de geçerli ve en iyi şekilde desteklenmektedir )
  • text/ecmascript( eski olarak kaydedilmiş , kullanımdan kaldırılmamış; ancak yine de geçerli )
  • application/javascript
  • application/ecmascript

Onlar do not dahil application/x-javascriptyukarıda listelenen MIME ortam türleri artık standartları ağacında kayıtlı olanlar olduğu gibi (bu yüzden gerek yoktur ve orada hiçbir Talep olmalıdır artık deneysel olanları kullanmak için). Krş RFC 4329, "Komut Dosyası Ortam Türleri" (2005 CE) ve Test Durumum: Komut Dosyası Ortam Türleri için Destek .

Çözümlerden biri, mümkünse, önerildiği gibi sunucuyu yapılandırmaktır. Apache için, bu yönergeyi eklemek kadar basit olabilir

AddType text/javascript .js

(ayrıntılar için Apache HTTP Sunucusu belgelerine bakın).

Ancak, istemci tarafı komut dosyası kaynağı PHP gibi bir sunucu tarafı uygulaması tarafından oluşturuluyorsa Content-Type, varsayılan olarak büyük olasılıkla üstbilgi alanı değerini açıkça ayarlamak gerekir text/html:

<?php
  header('Content-Type: text/javascript; charset=UTF-8');
  // ...
?>

(Bu ve benzeri ifadeler başka herhangi bir çıktıdan önce gelmelidir - PHP kılavuzuna bakın - aksi takdirde HTTP mesaj gövdesi zaten başlamış kabul edilir ve daha fazla başlık alanı göndermek için çok geç.)

Sunucu tarafında oluşturma, sunucuda düz .js dosyalarınız olsa bile, yorumların sunuldukları gibi kaldırılması, hepsinin tek bir büyük yanıt halinde paketlenmesi durumunda ( daha verimli olabilen isteklerin sayısı) veya sunucu tarafı uygulaması tarafından başka bir şekilde en aza indirgenir.


1
Sunucuya erişimimiz yoksa ne olur?
Adonis K. Kakoulidis

1
Sahip birini bul.
PointedEars

Bu açıklama için çok teşekkürler. Çok fazla insan 'sadece JSONP çocuğu gönder, nasıl yapılacağını bilmelisin' gibi kendini beğenmiş bir şey söylüyor. Sahip olduğunuz gibi doğru bir şekilde açıklamak için zaman alındığında, gün gibi açıktır. Bu, birkaç hafta boyunca yaşadığım bir sorunu düzeltti. Tekrar teşekkürler!

@ Rick-777: Değişikliğiniz hakkında yorum yapmadan cevabımı değiştirdiğiniz için teşekkür etmiyorum. Dikkatle cevabımı okursanız tavsiye niçin, fark text/javascriptüzerinde application/javascript. Bunun application/javascriptdaha iyi bir cevap olduğuna inanmak için bir nedeniniz varsa, yapmanız gereken en az şey bir yorumda kendinizi açıklamaktır. Yaptığınız değişikliklerin farkında olmam için Stack Overflow'un bildirim mekanizmasını gerektirmesi uygunsuz. Fudging olarak adlandırdığım değişikliklerinizi, uygunsuz olarak düşündüğüm bu sorunun yanıtlarına geri döndürdüm .
PointedEars

19

Weblogic gibi Java Uygulama sunucuları için

1) weblogic.xml dosyanızın hatasız olduğundan emin olun

Bunun gibi:

    <?xml version = '1.0' encoding = 'windows-1252'?>
<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd"
                  xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
    <container-descriptor>
        <prefer-web-inf-classes>true</prefer-web-inf-classes>
    </container-descriptor>
    <context-root>MyWebApp</context-root>
</weblogic-web-app>

2) Web.xml dosyanıza javascript için bir mime türü ekleyin :

    ...
        </servlet-mapping>

        <mime-mapping>    
            <extension>js</extension>        
            <mime-type>application/javascript</mime-type>        
        </mime-mapping>

        <welcome-file-list>
    ...

Bu, diğer Java kapsayıcıları için de çalışır - Tomcat vb application/javascript. gibi diğerleri text/javascriptkullanımdan kaldırıldı.

3) Tarayıcı önbelleğinizi temizlemeniz veya CTRL-F5 tuşuna basmanız gerekebilir


7

Bu sorunu yaşadım ve nasıl çözeceğimizi anladım.

Stil (CSS) dosyası, .css dosyasına başvuran PHP dosyasından farklı bir kodlamadayken olur

Örneğin, Unix kodlamada jQuery.js kullanmak ve UTF-8'de index.php kullanmak bu soruna neden olur, bu nedenle onları UTF-8 veya başka bir kodlamayı aynı şekilde yapmanız gerekir.


7

Javascript'inizi bir php dosyasıyla oluşturuyorsanız, bunu dosyanızın başına ekleyin:

<?php Header("Content-Type: application/x-javascript; charset=UTF-8"); ?>

Tanımlanmış farklı bir başlığınız varsa, hata almamak için değiştirin.
mopsyd

1
PointedEars post ile birlikte, görünüşte cevabı olmayan bir sorunu düzeltmeme yardımcı oldu ve haftalardır beynimi rafa kaldırıyorum. Çok teşekkür ederim: D Neden "PHP belgesinde başlıkları ayarlamak için" google yazdığımda bilmiyorum nasıl yapacağımı hakkında hiçbir şey söyleyen 1000 hatalı sonuçlar alıyorum, ama sonunda yazı lol buldum

3

Apache'nin httpd.conf dosyasına böyle bir satır eklemeniz yeterlidir:

AddType application/x-javascript .js

" .Js " girdim IIS 8 MIME Türleri altında "application / javascript" içeriyordu. " .Js" girişini "application / x-javascript" olarak değiştirdiğimde işe yaradı! Bu, bir ExtJS / ASP.NET / ExtDirect4DotNet uygulamasından kaynaklanmıştır
MacGyver

3

Bu hata ayıklama iletisini diğer yanıtlardan daha silik bir nedenden ötürü aldım: Bu, yeterli uyku alamadığınızda ve bir css dosyasının sözdizimini kullanarak bir js dosyasına başvurduğunuzda alınan hata iletisidir. De olduğu gibi,

<link rel='stylesheet' type='text/css' href='clearly_javascript.js'/>

ziyade

<script src='clearly_javascript.js'></script>

Bunu buraya koyacağımı düşündüm çünkü bu, hata mesajı aranırken ortaya çıkan ilk gönderi.


2

Garip bir sorun, ama bu sorunumu çözmeme yardımcı oldu. Bazen en kolay şeyleri bile anlamak zordur ...

/js/main.cssKomut dosyası etiketimde kullanmak yerine js/main.css

EVET , aslında bir fark yarattı. WAMP / Windows'da oturuyorum ve bir hayaletim yoktu ama sadecelocalhost/<project>

Ben başvurursanız /js/main.csssonra ben referans localhost/css/main.cssve değillocalhost/<project>/css/main.css

Bunu düşündüğünüzde, oldukça açıktır, ancak eğer birisi bunun üzerine tökezlese, bu cevabı paylaşacağımı düşündüm.


1

Js dosyalarınızın sunucuda var olduğunu kontrol edin. Bu sorun vardı ve js dosyaları sunucuya yüklenmemişti ve sunucu aslında html sayfası yerine - sunucuda yapılandırılmış varsayılan belge (örn. Default.html) dönüyordu keşfetti


1

Eğer Joomla! ve bir ( .js) JavaScript dosyası eklemeye çalışırken bu sinir bozucu hatayı alıyorsanız, aşağıdaki çözüm tam size göre.

En olası sorun, .js orada olmayan bir dosyayı eklemeye çalışmanız veya bu .jsdosyayı yanlış yerleştirmeniz ve Joomla! bir kaynak bulamazsa, genel 404 iletisi yerine, tam bir web sayfası ve html vb. içeren tam teşekküllü bir 404 iletisi döndürür.

Web tarayıcısı, .jsgerekli dosyanın bulunamadığını söyleyen bir web sayfası olarak yorumluyor .

Bu işe yarayabilir


1

Benim için, bu sadece bazı sayfalarda oldu çünkü window.locationbunun yerine kullandım $location.url(...);Bu sorunumu düzeltti. Anlamak için biraz zaman aldı :)


0

Bir web çerçevesi kullanırken bu sorunu vardı ve ilgili javascript dosyalarını belirlenen (çerçeve tarafından) javascript klasörüne taşıyarak düzeltti.


0

Bu olduğunda sık karşılaşılan bir şey , komut dosyası çağrılarınıza dahil etmeyi unuttuysanıztype . W3'e göre - gerektiği gibi açıkça ayarlamanız gerekir :

type(content-type): Bu özellik, öğenin içeriğinin komut dosyası dilini belirtir ve varsayılan komut dosyası dilini geçersiz kılar. Komut dosyası dili bir içerik türü olarak belirtilir (ör "text/javascript".). Yazarlar bu özellik için bir değer sağlamalıdır. Orada varsayılan değer bu özellik için.

Yine de tarayıcıların varsayılan bir değeri var gibi görünüyor plain/text.

Misal:

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&language=en"></script>

Apache yapılandırmanızda bu dosya uzantısı için bir varsayılan da ayarlayabilirsiniz:

<IfModule mod_mime.c>
    AddType text/javascript .js
</IfModule>

0

IIS'sinde, common HTTP FeaturesSizin altında Static Content,


0

Aynı hatayla karşılaştım ve sonunda (özel durumumda) dağıtım tanımlayıcısında (web.xml) bir sorun buldum

Sorun:

<servlet-mapping>
    <servlet-name>SessionController</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
...
<welcome-file-list>
    <welcome-file>/</welcome-file>
</welcome-file-list>

çözüm:

<servlet-mapping>
    <servlet-name>SessionController</servlet-name>
    <url-pattern>/SessionController</url-pattern>
</servlet-mapping>
...
<welcome-file-list>
    <welcome-file>desktop.jsp</welcome-file>
</welcome-file-list>

0

Spring MVC kullanıyorsanız, kaynak dosyasını Spring Dispatch Servlet'ten hariç tutmak için aşağıdaki mvn etiketini ekleyebilirsiniz.

<mvc:resources mapping="/js/*.js" location="/js/"/>
<mvc:resources mapping="/css/*.css" location="/css/"/>
<mvc:resources mapping="/images/*.*" location="/images/"/>

0

Benim durumumda, sunucu doğru gönderiyor Content-Typeama yanlış Content-Encoding. Yalnızca Content-Encoding: gzipsıkıştırılmış kaynaklar için ayarladığınızdan emin olun . Ayrıca, sunucudaki başlıkları düzelttikten sonra (benim durumumda Google Cloud Storage), önbellekleme nedeniyle değişiklikleri düzgün bir şekilde yansıtmak için birkaç dakika beklemek zorunda kaldım.


0

AdonisJS (örneğin, REST API) kullanıyorsanız, bundan kaçınmanın bir yolu yanıt başlığını şu şekilde tanımlamaktır:

response.safeHeader('Content-type', 'application/json')

-1

Javascript (bu durumda jQuery) ile bir dizide bir arka plan resimleri değiştirmeye çalışırken aynı sorunu yaşıyordum.

Neyse.

Bunun yerine:

m.setStyle('background-image','url(/templates/site/images/style5/'+backgs[i]+')')

Bunu yap:

eval("m.setStyle('background-image','url(/templates/site/images/style5/'+backgs[i]+')')");

Chrome javascript, 'ile yapılandırılmış bir öğenin içindeki bir değişkeni ayrıştırmaya çalışırken vidalanır. Benim durumumda, görüntü dizisi eklenmeden hemen önce durdu. Resim url + resim adını (dizinin içinde) ayrıştırmak yerine, yalnızca resim URL'sini ayrıştırıyordu.

Muhtemelen kodun içinde arama yapmanız ve nerede olduğunu görmeniz gerekir. FF, IE ve diğer tüm cihazlarda bu sorun yoktur.


4
evalEğer yardımcı olabilirseniz kullanmayın : javascripttoolbox.com/bestpractices/#eval
indra

-1

Burada simon-sarris tarafından gönderilen cevap bana yardımcı oldu.

Bu, sorunumu çözmeme yardımcı oldu.

Visual Studio yükleyicisi kayıt defterine hatalı bir satır eklemiş olmalıdır.

regedit'i açın ve bu kayıt defteri anahtarına bakın:

resim açıklamasını buraya girin

Şu anahtarı görüyor musun? İçerik Türü anahtarı? değerini text / plain'dan text / javascript olarak değiştirin.

Sonunda krom tekrar rahat nefes alabilir.

Ne İçerik Türü ne de PercievedType'ın Windows 7'de varsayılan olarak olmadığını unutmayın, bu yüzden ikisini de güvenle silebilirsiniz, ancak yapmanız gereken minimum düzenleme.

Neyse umarım bu sizin için de düzeltir!

Değişikliklerden sonra sisteminizi yeniden başlatmayı unutmayın.


Merhaba sahte. İntihal kötü. (mmmmkay?) İntihali ortadan kaldırmak için cevabınızı SO yönergelerine göre düzenledim .
Samuel Harmer
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.