Chrome mengatakan "Sumberdaya diartikan sebagai skrip tetapi ditransfer dengan teks tipe MIME / polos.", Apa untungnya?

316

Dalam FF dan semua, javascript saya berfungsi dengan baik. Tetapi di Chrome itu memberikan pesan ini:

Sumber daya diartikan sebagai skrip tetapi ditransfer dengan tipe teks MIME / polos.

Saya telah memeriksa semua tag skrip dan semuanya memiliki MIME type="text/javascript". Bahkan dikatakan demikian dengan jquery dan jquery ui. Apa yang salah dengan Chrome?

Apa masalahnya dan perbaikan untuk ini? Apakah ini sesuatu yang harus saya ubah di 'opsi' browser atau dari server, atau apakah saya harus mengubah kode saya?

Shaoz
sumber
14
Beberapa kode akan sangat membantu. Jangan pernah menyalahkan kompiler (peramban) terlebih dahulu tidak peduli betapa menggodanya itu karena Anda hampir selalu keliru.
msw
karena penasaran, apakah Anda menggunakan HTML5?
bollo

Jawaban:

203

Ini berarti bahwa server mengirimkan respons HTTP Javascript dengan

Content-Type: text/plain

Anda perlu mengonfigurasi server untuk mengirim respons JavaScript

Content-Type: application/javascript
Slaks
sumber
3
Saya menggunakan Weblogic Server 11g, tetapi saya tidak tahu di mana saya dapat mengkonfigurasi MIME di dalamnya. Tolong, bisa tunjukkan jalan?
Shaoz
6
Hmm bagaimana dengan ketika tidak ada server, tetapi script sebenarnya adalah file JSONP pada sistem file lokal Anda? Saya kira maka abaikan saja peringatan itu karena tidak serius dan berada di luar kendali Anda?
hippietrail
2
Ini harus content-type:application/javascriptmeskipun, application/x-javascriptadalah tidak sebuah RFC atau ECMAScript standar.
Jasdeep Khalsa
Ada banyak pertanyaan serupa. Jawaban ini mudah bagi saya: stackoverflow.com/a/12057490/1617395
Joe Leo
@ JoLeo: Itu untuk IIS.
Slaks
124

Ini tidak ada hubungannya dengan jQuery atau kekhasan kode skrip sisi klien. Ini adalah masalah sisi server : Server (aplikasi sisi) tidak mengirimkan nilai Content-Typebidang header HTTP yang diharapkan untuk sumber daya skrip sisi klien. Ini terjadi jika server Web tidak cukup dikonfigurasi, salah konfigurasi, atau aplikasi sisi server (misalnya, PHP) menghasilkan sumber daya skrip sisi klien.

Jenis media MIME yang tepat untuk implementasi ECMAScript seperti JavaScript meliputi:

  • text/javascript(terdaftar sebagai usang , tidak usang; tetapi masih valid , dan didukung terbaik )
  • text/ecmascript(terdaftar sebagai usang , tidak usang; tetapi masih valid )
  • application/javascript
  • application/ecmascript

Mereka tidak termasuk application/x-javascript, karena jenis media MIME yang tercantum di atas adalah yang terdaftar di pohon standar sekarang (jadi tidak perlu, dan seharusnya tidak ada keinginan, untuk menggunakan yang eksperimental lagi). Lih RFC 4329, "Jenis Media Scripting" (2005 M) dan Uji Kasus saya : Dukungan untuk Jenis Media Scripting .

Salah satu solusinya adalah mengkonfigurasi server jika memungkinkan, seperti yang telah direkomendasikan. Untuk Apache, ini bisa sesederhana menambahkan arahan

AddType text/javascript .js

(lihat dokumentasi Apache HTTP Server untuk detailnya).

Tetapi jika sumber daya skrip sisi klien dihasilkan oleh aplikasi sisi server, seperti PHP, maka perlu untuk mengatur nilai Content-Typebidang header secara eksplisit, karena kemungkinan default text/html:

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

(Pernyataan itu dan yang serupa harus didahulukan sebelum keluaran lain - lihat manual PHP -, kalau tidak badan pesan HTTP dianggap sudah dimulai dan sudah terlambat untuk mengirim lebih banyak bidang tajuk.)

Pembuatan sisi server dapat terjadi dengan mudah pada sumber daya skrip sisi klien bahkan jika Anda memiliki file .js di server, jika komentar dihapus dari mereka ketika disajikan, jika semuanya dikemas dalam satu respons besar (untuk mengurangi sejumlah permintaan, yang dapat lebih efisien), atau diminimalkan oleh aplikasi sisi server dengan cara lain.

PointedEars
sumber
1
Bagaimana jika kita tidak memiliki akses ke server?
Adonis K. Kakoulidis
1
Temukan seseorang yang punya.
PointedEars
Terima kasih banyak atas penjelasan ini. Terlalu banyak orang mengatakan sesuatu yang sombong seperti 'kirim saja anak JSONP, Anda harus tahu cara melakukannya'. Ketika waktu diambil untuk menjelaskannya dengan tepat seperti yang Anda miliki, jelas hari itu. Ini telah memperbaiki masalah yang saya alami selama beberapa minggu. Terima kasih lagi!
@ Rick-777: Saya tidak menghargai Anda mengubah jawaban saya tanpa mengomentari perubahan Anda. Jika Anda membaca jawaban saya dengan cermat, Anda menyadari mengapa saya merekomendasikan text/javascriptlebih application/javascript. Jika Anda memiliki alasan untuk percaya bahwa itu application/javascriptadalah jawaban yang lebih baik sekarang, maka yang paling tidak Anda lakukan adalah menjelaskan diri Anda sendiri dalam komentar. Tidak pantas bahwa ini memerlukan mekanisme pemberitahuan Stack Overflow agar saya mengetahui perubahan Anda. Saya telah mengembalikan perubahan Anda, yang saya sebut fudging , ke jawaban atas pertanyaan ini di mana saya menganggapnya tidak pantas.
PointedEars
19

Untuk server Aplikasi Java seperti Weblogic

1) Pastikan file weblogic.xml Anda bebas dari kesalahan

Seperti yang ini:

    <?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) Tambahkan tipe mime untuk javascript ke file web.xml Anda :

    ...
        </servlet-mapping>

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

        <welcome-file-list>
    ...

Ini juga akan berfungsi untuk kontainer Java lainnya - Tomcat dll. application/javascriptSaat ini adalah satu-satunya jenis mime yang valid; yang lain seperti text/javascripttelah ditinggalkan.

3) Anda mungkin perlu membersihkan cache browser Anda atau tekan CTRL-F5

egallardo
sumber
7

Saya memiliki masalah ini dan saya menemukan cara untuk memperbaikinya.

Ini terjadi ketika file gaya (CSS) dalam penyandian berbeda dari file PHP yang mereferensikan file .css

Misalnya, menggunakan jQuery.js dalam penyandian Unix dan menggunakan index.php di UTF-8 akan menyebabkan masalah ini sehingga Anda harus membuatnya UTF-8 atau penyandian lainnya asalkan sama.

mak
sumber
7

Jika Anda membuat javascript dengan file php, tambahkan ini sebagai awal file Anda:

<?php Header("Content-Type: application/x-javascript; charset=UTF-8"); ?>
mopsyd
sumber
Jika Anda memiliki tajuk yang berbeda, ganti sehingga Anda tidak mendapatkan kesalahan.
mopsyd
1
Seiring dengan posting PointedEars ini telah membantu saya memperbaiki masalah yang tampaknya tidak memiliki jawaban dan saya telah memeras otak saya selama berminggu-minggu. Terima kasih banyak: D Mengapa ketika saya mengetik di google "cara mengatur header dalam dokumen PHP" Saya mendapatkan 1000 hasil yang salah yang tidak memberi tahu saya tentang bagaimana melakukannya jadi saya tidak tahu, tapi saya akhirnya menemukan posting Anda lol
3

Di httpd.conf apache Anda, cukup tambahkan baris seperti itu:

AddType application/x-javascript .js
Ruslan Abuzant
sumber
Saya " js" entri memiliki "aplikasi / javascript" di bawah Jenis IIS 8 MIME. Ketika saya mengubah entri ".js" menjadi "application / x-javascript", itu berhasil! Ini berasal dari aplikasi ExtJS / ASP.NET / ExtDirect4DotNet
MacGyver
3

Saya menerima pesan debug ini karena alasan yang lebih konyol daripada jawaban lain di sini: Ini adalah pesan kesalahan yang diterima ketika Anda tidak mendapatkan cukup tidur dan referensi file js dengan menggunakan sintaks untuk file css. Seperti dalam,

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

daripada

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

Saya pikir saya meletakkan ini di sini karena ini adalah posting pertama yang muncul ketika mencari pesan kesalahan.

Robert Townley
sumber
2

Masalah aneh, tetapi ini membantu saya untuk menyelesaikan masalah saya. Kadang-kadang bahkan hal yang paling mudah pun sulit untuk dipikirkan ...

Alih-alih menggunakan /js/main.cssdalam tag-skrip saya, saya menggunakanjs/main.css

Ya , itu benar-benar membuat perbedaan. Saya duduk di WAMP / Windows dan saya tidak punya vhost tetapi hanya digunakanlocalhost/<project>

Jika saya referensi /js/main.cssmaka saya referensi localhost/css/main.cssdan bukanlocalhost/<project>/css/main.css

Ketika Anda memikirkannya, itu cukup jelas tetapi jika seseorang menemukan ini, saya pikir saya akan membagikan jawaban ini.

bestprogrammerintheworld
sumber
1

Periksa apakah file js Anda benar-benar ada di server. Saya punya masalah ini dan menemukan file js belum diunggah ke server dan server sebenarnya mengembalikan halaman html - yang merupakan dokumen default yang dikonfigurasi di server (misalnya default.html)

Steve Mc
sumber
1

Jika Anda bekerja di Joomla! dan mendapatkan kesalahan yang menjengkelkan ini ketika mencoba memasukkan .jsfile JavaScript ( ), maka solusi berikut adalah untuk Anda.

Masalah yang paling mungkin adalah bahwa Anda mencoba untuk memasukkan .js file yang tidak ada di sana , atau Anda hanya salah meletakkan .jsfile itu, dan ketika Joomla! tidak menemukan sumber daya, maka alih-alih pesan umum 404, ia mengembalikan pesan 404 lengkap dengan halaman web lengkap dan html dll.

Browser web menafsirkannya sebagai .jspadahal itu hanya halaman web yang mengatakan bahwa file yang diperlukan tidak ditemukan .

Ini bisa berhasil

Mohd Abdul Mujib
sumber
1

Bagi saya, itu hanya terjadi pada beberapa halaman karena saya menggunakan window.locationalih-alih $location.url(...);ini memperbaiki masalah saya. Butuh waktu beberapa saat untuk mencari tahu :)

tfa
sumber
0

Saya punya masalah ini saat menggunakan kerangka kerja web dan memperbaikinya dengan memindahkan file javascript yang relevan ke folder javascript yang ditunjuk (oleh kerangka kerja).

JJ.
sumber
0

Suatu hal yang umum ketika ini terjadi adalah jika Anda lupa memasukkannya ke typedalam panggilan skrip Anda. Anda harus mengaturnya secara eksplisit, karena - menurut W3 - wajib :

type(tipe konten): Atribut ini menentukan bahasa scripting dari konten elemen dan menimpa bahasa scripting default. Bahasa skrip ditentukan sebagai jenis konten (misalnya, "text/javascript"). Penulis harus memberikan nilai untuk atribut ini. Tidak ada nilai default untuk atribut ini.

Masih tampaknya browser memiliki nilai default plain/text.

Contoh:

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

Anda juga dapat menetapkan default untuk ekstensi file itu di konfigurasi Apache Anda:

<IfModule mod_mime.c>
    AddType text/javascript .js
</IfModule>
kaisar
sumber
0

Jika IIS memastikan bahwa Di bawah Anda, common HTTP FeaturesAnda telah Static Contentdihidupkan

varun
sumber
0

Saya memiliki kesalahan yang sama dan akhirnya (dalam kasus khusus saya) saya menemukan masalah di deskriptor penempatan (web.xml)

Masalah:

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

solusinya:

<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>
Daniel Kennedy
sumber
0

Jika Anda menggunakan Spring MVC, Anda dapat menambahkan tag mvn berikut untuk mengecualikan file sumber daya dari Spring Dispatch Servlet

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

Dalam kasus saya, server mengirim yang benar Content-Typetetapi dengan yang salah Content-Encoding. Pastikan Anda hanya mengatur Content-Encoding: gzipsumber daya yang di-gzip. Juga, setelah saya memperbaiki header di server (dalam kasus saya, Google Cloud Storage), saya harus menunggu beberapa menit untuk mencerminkan perubahan karena caching.

falsarella
sumber
0

Jika Anda menggunakan AdonisJS (REST API, misalnya), salah satu cara untuk menghindari ini adalah dengan menentukan header respons dengan cara ini:

response.safeHeader('Content-type', 'application/json')
Billal Begueradj
sumber
-1

Saya mengalami masalah yang sama ketika mencoba mengubah gambar latar belakang dalam array melalui javascript (jQuery dalam kasus ini).

Bagaimanapun.

Alih-alih ini:

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

melakukan hal ini:

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

Javascript Chrome akan kacau ketika mencoba mem-parsing variabel di dalam elemen yang terstruktur dengan '. Dalam kasus saya itu berhenti tepat sebelum array gambar dimasukkan. Alih-alih mem-parsing url gambar + nama gambar (di dalam array), itu parsing hanya url gambar.

Anda mungkin perlu mencari di dalam kode dan melihat di mana itu terjadi. FF, IE dan lainnya tidak memiliki masalah ini.

Marco G.
sumber
4
Jangan gunakan evaljika Anda dapat membantu: javascripttoolbox.com/bestpractices/#eval
indra
-1

Jawaban yang diposting di sini oleh simon-sarris membantu saya.

Ini membantu saya memecahkan masalah saya.

Pemasang Visual Studio harus telah menambahkan jalur yang salah ke dalam registri.

buka regedit dan lihat kunci registri ini:

masukkan deskripsi gambar di sini

Lihat kunci itu? Kunci Jenis Konten? ubah nilainya dari teks / polos menjadi teks / javascript.

Akhirnya chrome bisa bernafas lega lagi.

Saya harus mencatat bahwa tidak ada Tipe Konten atau PercifiedType yang ada secara default pada Windows 7, jadi Anda mungkin bisa menghapus keduanya dengan aman, tetapi minimum yang perlu Anda lakukan adalah pengeditan itu.

Pokoknya saya harap ini memperbaikinya juga untuk Anda!

Jangan lupa untuk me-restart sistem Anda setelah perubahan.

palsu
sumber
Hai palsu. Plagiarisme itu buruk. (mmmmkay?) Saya telah mengedit jawaban Anda untuk menghapus plagiarisme sesuai dengan pedoman SO .
Samuel Harmer