2012-10-18 24 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,它將被廢棄。

相關問題