IE ActiveX Change
"Click to activate and use this control"

Thursday, April 20, 2006

<noscript> solution

In the Macromedia Forums, fpproductions came up with a clever workaround using the <noscript> tags. The solution works by getting IE to add a <noscript> just before the object, and a </noscript> just after the object, and we can then use JavaScript to read the contents of the <noscript> tag, and write it back out again. I changed fpproductions original script for that the object tag is written out as soon as IE processes each object tag.

Firstly create a JavaScript file called, say, ienoscript.js containing:

var bo_ns_id = 0;

function startIeFix(){
document.write('<noscript id="bo_ns_id_' + bo_ns_id + '">');

function endIeFix(){
var theObject = document.getElementById("bo_ns_id_" + bo_ns_id++);
var theNoScript = theObject.innerHTML;

function isIE(){
var strBrowser = navigator.userAgent.toLowerCase();
if(strBrowser.indexOf("msie") > -1 && strBrowser.indexOf("mac") < 0){
return true;
return false;

This file is referenced inbetween the <head> and </head> tags:

<script type="text/javascript" src="ienoscript.js"></script>

Then, for each <object> tag you need to add a line above and below each one.

<script type="text/javascript">startIeFix();</script>
etc etc
<!--[if gte IE 6]></noscript><![endif]--><script

It seems to work OK on all the browsers I tried it on, the only exception being Opera when it identifies itself as IE, which I guess could be solved using the [if gte IE 6] to write the top <script> bit out too. Something like:

<!--[if gte IE 6]><script type="text/javascript">startIeFix();</script><![endif]-->
etc etc
<!--[if gte IE 6]></noscript><script

This technique also preserves any FlashVars parameters too.


Post a comment

<< Home