Jak zprovoznit Modernizr 1.5 v IE9 Platform Preview

This text is also available in English

Pokud používáte knihovnu Modernizr verze 1.5, pravděpodobně jste zjistili, že nefunguje korektně pod MSIE9 Platform Preview (projevilo se to i na našem Detektoru podpory HTML5). Příčinou je nedostatečné ošetření detekčního kódu v knihovně a nestandardní chování IE9PP.

Knihovna Modernizr testuje některé vlastnosti pomocí testu, který vypadá zhruba takto:

if (m_style[property] !== undefined) ...

m_style je zkratka pro styl testovacího elementu:

m = doc.createElement( mod ),
m_style = m.style

Pro CSS3 transformace se testují tyto vlastnosti: ‚transformPro­perty‘, ‚WebkitTransform‘, ‚MozTransform‘, ‚OTransform‘ a ‚msTransform‘. Problém je, že v IE9PP je m_style pro první čtyři vlastnosti správně undefined, ale poslední vlastnost, msTransform, nevrátí undefined, ale místo toho vyhodí výjimku „Not Implemented“. Ve funkci test_props() v knihovně Modernizr verze 1.5 není toto chování korektně ošetřeno, skript tedy skončí s chybou a knihovna nefunguje tak jak má („Modernizr není definován“).

Pravděpodobný důvod takového chování je ten, že IE9 počítá s podporou msTransform (tedy není důvod vrátit „undefined“), ale v Platform Preview verzi nejsou transformace zatím funkční, proto pokus o přístup k nim vyhodí výjimku. Jde o nestandardní chování a lze předpokládat, že v další verzi IE9 (např. v očekávané betě) bude toto fungovat už korektně. Paul Irish, spoluautor Modernizru, toto chování reportoval jako bug.

Ošetření spočívá v uzavření testovací podmínky do bloku try{}, který nestandardně vyhozenou výjimku zachytí, a knihovna tak nezhavaruje celá. Takto vypadá ošetřená funkce:

function test_props( props, callback ) {
    for ( var i in props ) {
        try {
          if ( m_style[ props[i] ] !== undefined && ( !callback || callback( props[i], m ) ))
             {return true;}
        } catch (e) { ; }
    }
}

Na problémy IE9PP s Detektorem, jejichž příčinou je právě výše zmíněný bug, upozornil Štěpán Bechynský.

Začal programovat v roce 1984 s programovatelnou kalkulačkou. Pokračoval k BASICu, assembleru Z80, Forthu, Pascalu, Céčku, dalším assemblerům, před časem v PHP a teď by rád neprogramoval a radši se věnoval starým počítačům.

Zatím nebyl přidán žádný komentář, buďte první!

Přidat komentář
Zdroj: https://www.zdrojak.cz/?p=1506