Conditional SSI

I was having trouble writing a javascript that sniffs the browser for IE or non-IE, then selects a server side include (SSI) based on the result.

It turned out that you cant do that with javascript: first of all it seems to mis-read the include string:

document.write('<!--# include virtual="includes/safety.htm" -->');

The browser sees this as comment and lops everything off after the (‘ even though the string has quotes around it. If I use a to escape the ! as !, then it simply writes the whole string out to the page, rather than interpreting it.

Apparently this is because SSI’s are evaluated on the server, so they are already executed before the browser renders the page – so by the time my page gets rendered, it’s too late.

Many thanks to glenngv of codingforums.com for help with this.

Here is the code I ended up using, and it works great:

<!--#if expr="${HTTP_USER_AGENT} = /MSIE/" -->
<!--# include virtual="includes/safety.htm" -->
<!--#else -->
<!--# include virtual="includes/safety_nonIE.htm" -->
<!--#endif -->

This chooses a server-side include based on the user agent.

For more information on this see these links:

Conditional SSI by John Miller

and
Webmaster’s Guide to Server Side Includes: Conditional SSI

and Apache SSI: conditional expressions