2012-10-18 26 views
3

我正在创建一个应该创建嵌入式SWF的脚本,并且如果用户没有可用的Flash,也可以使用图像作为后备。由于我不被允许使用任何其他类似SWFobject的库,所以我被困在使用DOM技术(如createElement/appendChild/setAttribute)中。使用createElement在IE8或更低版本中为swf添加后备图像?

我一直在使用这个伟大的博客文章:http://pipwerks.com/2011/05/30/using-the-object-element-to-dynamically-embed-flash-swfs-in-internet-explorer/作为指导,我已经在我测试过的所有浏览器中运行Flash,但它不包含任何解决方案,以便我可以注入链接/图像组合到Internet Explorer 8中的对象中。

使用createElement(“a”)和类似的图像并将其添加到任何其他Div元素都可以正常工作,但是如果我尝试将其注入到对象MSIE8抛出“无效参数”。

我也尝试创建一个ID为假的参数,并试图用我的链接/图像组合替换,并在我测试过的其他浏览器,但不是在IE8中工作。任何想法都将非常感激。

这是我的代码(我用的JS和PHP组合创建脚本):

var alink = document.createElement("a"); 
alink.setAttribute("href", "URL_TO_TARGET_SITE_OR_CLICK_COUNTER"); 

var alinkImage = document.createElement("img"); 
alinkImage.setAttribute("src", "URL_TO_IMAGE"); 
alinkImage.setAttribute("alt", ""); 
alinkImage.setAttribute("width", "IMAGE_WIDTH"); 
alinkImage.setAttribute("height", "IMAGE_HEIGHT"); 

alink.appendChild(alinkImage); 

if(!IE8) { 
    flashObject.appendChild(alink); 
    document.getElementById('ad_filler_placeholder').appendChild(flashObject); 
} else { 
    /* this code will be executed if IE8 or lower, sadly appending alink into flashobject fails */ 
    flashObject.appendChild(alink); 
    document.getElementById('ad_filler_placeholder').appendChild(flashObject); 
} 

回答

0

好了,所以我不得不调整我的脚本升技相匹配的最终结果在规定pipwerks的博客文章。虽然检查IE我声明如下与innerHTML的的flashObject:

var fallback=false; 

flashObject = (isIE) ? createIeObject() : document.createElement("object"); 

if(!isIE) { 
    flashObject.setAttribute("type", "application/x-shockwave-flash"); 
    flashObject.setAttribute("data", "URL_TO_SWF"); 
    fallback = true; 
} 

的createIeObject功能做到这一点:

function createIeObject(){ 
    var div = document.createElement("div"); 
    div.innerHTML = "<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'><param name='movie' value='URL_TO_SWF'><a href='URL_FOR_CLICK'><img src='URL_TO_FALLBACK_IMAGE' alt='' width='WIDTH' height='HEIGHT' border='0' /></a></object>"; 
    return div.firstChild; 
} 

请注意,我说这个段内备用。而且我还必须在图像上使用宽度,高度和边框,否则IE会在所有内容的周围添加令人讨厌的蓝色边框。好的,一切都按我的计划行事..?当然不是=)IE8(也可能是其他版本)不能将任何子项追加到最初使用document.write创建的div,因为DOM没有在该状态下完全加载。这可以解决这个包裹整个(几乎)的东西:

onload = function(){} 

我也尝试通过DFP,它至少从IE7及以上的作品。其他好人浏览器通过常规appendChild添加fallbakc,如原始问题中所述,我只是将它移动到if语句中,因为如果是IE,它将被废弃。

相关问题