Why self-closing script tags doesn’t work?

learning javascript

Self-closing script tag are not supported by all browsers as this may contain inline code and HTML is not smart enough to turn that feature on or off.

Let’s see two types of script tag.

One is self-closing script tag which browsers do not correctly recognize.

<script src="myscript.js" />

And the another is,

<script src="myscript.js"></script>

which we use generally in every cases.

Does this break the concept of XHTML support anyway?

As XHTML 1 specification says:

Don’t use the minimized form i.e. use <p> </p> and not <p />. Because, the script tag can contain inline code and HTML is not smart enough so that it can turn on or off that feature based on the presence of an attribute.

We can see in our HTML that some of the tags are always self-closed.
For e.g. <hr>Your content here</hr> does not make any sense.
In the same way, there are some tags which cannot be self-closed.
And <script> tag is one of them.

Basically, the concept of self-closing tags is an XML concept. You can use them in XHTML if the document is served with an XML content-type but not if it is served as text/html.

For some of the HTML tags like <img> cannot have any content and thus so they do not have end tags.

But, as script can have a src attribute or the script be can inside the element, <script> is not one of them.

Read Also: Embedding PDFs without JavaScript

HTML5 allows a “/” character to appear at the end of a start tag for an element which is defined as EMPTY.

So, the <script> element is not allowed to be empty as this may contain inline code, and the HTML is not smart enough to turn that feature on/off based on the presence of the attribute.
So you have to use <script … ></script> every time.

But, on the other hand, HTML have an excellent tag for including any references to outside resource like the <link> tag, and this can be self-closing.

Ans It is already used to include CSS stylesheets, RSS and Atom feeds, canonical URIs etc.

Leave a Reply

Your email address will not be published. Required fields are marked *