If you look at html5boilerplate.com they never use any type on their <script> tags. Hmm... but is there more to it?

If you don't specify a type, the default becomes "text/javascript" but according to RFC4329 the "text/javascript" MIME type is obsolete in favor of "application/javascript".

If the default MIME type for a <script> tag thus becomes either "text/javascript" or "application/javascript" is there any sensible browser on this green earth that would not translate a piece of inline Javascript code as, exactly that; Javascript? Probably not.

What about <script> tags with a src attribute? Does the type matter?

I read the spec a couple of times and it feels like reading legalese but it ultimately says: the value of the type tag must be that of the body of the script tag.

So, what happens if you embed a javascript file with a mismatching type? Let's see:

I've created 4 different files all serve with a different Content-Type:

  1. text/javascript
  2. application/javascript
  3. text/plain
  4. application/x-javascript

Now, let's see if we can get things wrong. And by wrong I mean that the javascript isn't executed and thus appearing as unexecuted raw Javascript code. First batch, embed them with different types:

no type

text/javascript

application/javascript

And what about spelling mistakes?:

txt/javascript

text/jvassscrippt

As you can probably see, the spelling mistakes stops the execution of Javascript.

Open any of them and see for yourself. All browsers that I've been able to test executes the javascript just fine in all of them. The all pass the w3c validator.

It would be nice if some Windows people can share if it works on Internet Explorer.

Conclusion

The type tag is probably not needed for either inline or embedded Javascript. It's a relic from the past that is just causing you extra typing strain.

The type attribute is there for you only for exceptional use cases. Not needed for general use and if you use it and accidentally spell it wrong it will break things.

Comments

Ian Bicking

IE9, with Compatibility View on (I assume emulating older IE version?) does not display the last example (application/javascript). It doesn't show document.write, it's just blank above the hr. Otherwise works fine. So no type is better than the "proper" modern type.

Matthew Schinckel

A non-javascript type is used, for instance, by the jQuery tmpl plugin. (text/x-jquery-tmpl, IIRC). This prevents it being executed as javascript, as it isn't.

Janet

Despite your conclusion 2.5 years ago, I can still see your html script containing "text/javascript". Any reason why you still keep it?

Peter Bengtsson

Excellent question! It must either be from old muscle memory habits or when copying a script tag from some other old piece of code.

Also, I think some tools like django_compressor which concatenates and merges multiple .js files into one still uses `type="text/javascript"` when it spits out the final result.

The other javascript I have here on my site is from other automated tools.

Your email will never ever be published.

Previous:
maxlength_countdown() - a useful jQuery plugin for showing characters left May 1, 2011 JavaScript
Next:
Test static resources in Django tests June 2, 2011 Django
Related by category:
How to SSG a Vite SPA April 26, 2025 JavaScript
Switching from Next.js to Vite + wouter July 28, 2023 JavaScript
An ideal pattern to combine React Router with TanStack Query November 18, 2024 JavaScript
get in JavaScript is the same as property in Python February 13, 2025 JavaScript
Related by keyword:
How much faster is Cheerio at parsing depending on xmlMode? December 5, 2022 Node, JavaScript
Fastest way to turn HTML into text in Python January 8, 2021 Python
django-html-validator October 20, 2014 Python, Web development, Django
Difference between $.data('foo') and $.attr('data-foo') in jQuery June 10, 2012 JavaScript